how can I delete all files and sub directories from current directory including current directory?
-
operating system? on the *NIX-based stuff, you're looking for 'rm -rf directory/'
NOTE: the '-r' flag for 'recursive' can be dangerous!
-
olddir=`pwd` && cd .. && rm -rf "$olddir"
The
cd ..
is needed, otherwise it will fail since you can't remove the current directory.kmkaplan : You *can* remove the current directory.dwc : kmkaplan, are you *sure* you can delete the current directory with rm? How many operating systems did you base that knowledge on?Johannes Weiß : wont work for a directory called --no-preserve-root for example.kmkaplan : dwc: yes I tested Linux, OpenBSD and MacOSX. But I am pretty sure every Unix would do the same and I even think every POSIX system will do it.Mikeage : You can in Linux (just confirmed). Interestingly enough, once the directory is deleted, ls -al reports "total 0" instead of something like total X, with . and .. presentJohannes Weiß : deleting an open file is absolutely no problem on unix. Being in a directory is nothing more than having a file open. kmkaplan is correct!dwc : I see: rm: "." and ".." may not be removed Why not be conservative and have it work everywhere? What if this snippet gets put in a #!/bin/sh script? What if...? It's nicer to have something that works in a more portable fashion. -
rm -fr "`pwd`"
kmkaplan : Yeah, a bug in SO prevented the backquotes from appearing.Caffeine : Oh it is working with the backquotes - apologies ...Johannes Weiß : wont work for a directory called --no-preserve-root for example, tookmkaplan : Johannes: pwd returns an absolute path. It will never start with dashes.Johannes Weiß : kmkaplan: sorry, thats correct! Didn't thing about that. I always use -- and most of the time it is necessary, but wiht pwd it's not. -
Under bash with GNU tools, I would do it like that (should be secure in most cases):
rm -rf -- "$(pwd -P)" && cd ..
not under bash and without GNU tools, I would use:
TMP=`pwd -P` && cd "`dirname $TMP`" && rm -rf "./`basename $TMP`" && unset TMP
why this more secure:
- end the argument list with
--
in cases our directory starts with a dash (non-bash:./
before the filename) pwd -P
not justpwd
in cases where we are not in a real directory but in a symlink pointing to it."
s around the argument in cases the directory contains spaces
some random info (bash version):
- the
cd ..
at the end can be omitted, but you would be in a non-existant directory otherwise...
EDIT: As kmkaplan noted, the
--
thing is not necessary, aspwd
returns the complete path name which always starts with/
on UNIXkmkaplan : As noted above, directories starting with “--” are not a problem: pwd’s result always starts with a “/”.Johannes Weiß : sorry, you are right!Ib33X : what if you would like to include first a small dialog aka are you sure you want to delete this directory? and make alias for it all?Johannes Weiß : You can use rm -rfi instead of rm -rf and it will ask you "rm: remove directory `/tmp/dir_to_be_deleted'?", do you mean that?Ib33X : rm -rfi would ask for every action in this directory, I was thinking something that will ask only once and delete everything.Johannes Weiß : read -n1 -p"Do you really want to delete '$(pwd -P)' [yN]?" A && if [ "$(echo $A | tr Y y)" = "y" ]; then rm -rf -- "$(pwd -P)" && cd .. ; fi - end the argument list with
-
EDIT: Missed the part in the question about removing the current directory, sorry.If DOS / Windows CMD then:
RD /S /Q [drive:]path
/Q = Quiet mode and won't ask for confirmation - probably not advisable unless it has to be run unattended
EDIT2:
I think this would be possible under DOS / Windows CMD, but I can;t quite find a way to pipe the data between commands. Someone else may know the fix for that?
FOR /F %i IN ('cd') DO SET MyDir=%i | CD .. | RD /S %MyDir%
kmkaplan : This does not address the *current* directory part.Kristen : Ah, good point, sorry missed that.
0 comments:
Post a Comment