path='/mnt/testfolder1/testfolder2'
cd "${path%{${path#/*/}}" # cd /mnt/
rmdir -p "${path#/mnt/}" # rm -p testfolder1/testfolder2
cd - # go back to previous directory
或者,自己实现逻辑:尝试删除目录(如果不为空,则会失败),然后在每次循环迭代中剥离最后一个组件:
path='/mnt/testfolder1/testfolder2'
while rmdir "$path" 2>/dev/null; do
path="${path%/*}"
done
要在/mnt处停止,请执行以下操作:
path='/mnt/testfolder1/testfolder2'
while [ "$path" != '/mnt' ] && rmdir "$path" 2>/dev/null; do
path="${path%/*}"
done
$ man rm
[...]
-f, --force
ignore nonexistent files and arguments, never prompt
[...]
-r, -R, --recursive
remove directories and their contents recursively
2条答案
按热度按时间icnyk63a1#
使用
-p
switch ofrmdir
:删除路径名中的所有目录。对于每个dir操作数:
1.应删除其命名的目录条目。
1.如果dir操作数包括多个路径名组件,则应发生与以下命令等效的效果:
rmdir -p $(dirname dir)
您也可以使用standard parameter expansion忽略
/mnt
前缀:或者,自己实现逻辑:尝试删除目录(如果不为空,则会失败),然后在每次循环迭代中剥离最后一个组件:
要在
/mnt
处停止,请执行以下操作:我也想强调一下umläute's
find
based solution,尽管有一些修改:这将只删除空目录,从叶目录开始。参数扩展只保留路径的前2个组件(
mnt
和testfolder1
)oo7oh9g92#
只需递归删除:
作为一个解释:
如果只想删除 * 空 * 文件夹,可以用途:
使用
man find
来找出这实际上做了什么,它留给用户作为练习。