How can I delete all files and subdirectories from current directory including current directory?
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, as pwd
returns the complete path name which always starts with /
on UNIX
-P
is the opposite of what I'd expect -- if I'm in a symlinked dir and I try removing it, I'd expect the symlink to be unlinked, not the original dir, and certainly not leaving a broken symlink in its place. –
Outset olddir=`pwd` && cd .. && rm -rf "$olddir"
The cd ..
is needed, otherwise it will fail since you can't remove the current directory.
rm -fr "`pwd`"
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%
operating system? on the *NIX-based stuff, you're looking for 'rm -rf directory/'
NOTE: the '-r' flag for 'recursive' can be dangerous!
You just can go back the target folder's parent folder, then use 'rm -rf yourFolder'. or you can use 'rm -rf *' to delete all files and subfolders from the current folder.
Delete current directory with confirmation. Unlink if current dir is a symlink.
rmd() {
if [[ -z "$1" ]]; then
>&2 echo "usage: rmd <dir>"
return 1
fi
dir=$(realpath -se "$1") || return 2
if [[ -L "$dir" ]]; then
read -s -k "?Unlink '$dir'? "
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
unlink -- "$dir"
else
return 3
fi
else
read -s -k "?Recursively delete '$dir'? "
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf -- "$dir"
else
return 4
fi
fi
}
rm.() {
rmd "$(pwd -L)" && cd ..
}
Usage:
/tmp/tmp.29mUflkHKU base
❯ tree .
.
├── bar -> foo
└── foo
2 directories, 0 files
/tmp/tmp.29mUflkHKU base
❯ cd bar
/tmp/tmp.29mUflkHKU/bar base
❯ rm.
Unlink /tmp/tmp.29mUflkHKU/bar?
/tmp/tmp.29mUflkHKU base
❯ tree .
.
└── foo
1 directory, 0 files
/tmp/tmp.29mUflkHKU base
❯ cd foo
/tmp/tmp.29mUflkHKU/foo base
❯ rm.
Recursively delete /tmp/tmp.29mUflkHKU/foo?
/tmp/tmp.29mUflkHKU base
❯ tree .
.
0 directories, 0 files
Note: read -s -k
is for zsh
. Use read -n1 -p
for bash
(source)
© 2022 - 2024 — McMap. All rights reserved.