在Linux中,如何删除嵌套在文件夹层次结构中的具有特定名称的文件夹?
以下路径位于文件夹下,我想删除所有名为的文件夹a
。
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
我应该从父文件夹使用什么Linux命令?
在Linux中,如何删除嵌套在文件夹层次结构中的具有特定名称的文件夹?
以下路径位于文件夹下,我想删除所有名为的文件夹a
。
1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b
我应该从父文件夹使用什么Linux命令?
Answers:
如果目标目录为空,请使用find,仅过滤目录,按名称过滤,执行rmdir:
find . -type d -name a -exec rmdir {} \;
如果你想递归地删除它的内容,更换-exec rmdir {} \;
的-delete
或-prune -exec rm -rf {} \;
。其他答案包括有关这些版本的详细信息,也请相信它们。
{} \;
吗?
{}
可以读作“针对每个匹配的文件/文件夹”-即它替代了每个“找到的”文件/文件夹。\;
是该-exec
子句的终止符。
-prune
根据@David Grayson的建议在答案中添加标志。没有这个,find
仍然会尝试访问现在丢失的文件夹,并最终以错误代码退出,这可能例如使Docker构建失败。
将find用作名称“ a”,然后执行rm删除根据您的意愿命名的名称,如下所示:
find . -name a -exec rm -rf {} \;
首先使用ls进行测试以列出:
find . -name a -exec ls {} \;
为了确保只删除目录而不删除普通文件,请使用“ -type d” arg(如注释中所建议):
find . -name a -type d -exec rm -rf {} \;
“ {}”是找到的每个文件“ a”的替换-通过替换针对每个文件执行exec命令。
1/2/a/3/4
,这可能不是故意的,因此建议+1首先测试...
echo {}
进行测试,而不是ls {}
node_modules/
。
find . -name a -type d -exec rm -rf {} \;
并且可以正常工作,尽管它find: ‘./subdir/subdir/a’: No such file or directory
为每个删除的目录打印了出来。
这也起作用-它将删除所有名为“ a”的文件夹及其内容:
rm -rf `find -type d -name a`
find/rm
。
find . -name a -exec rm -rf {} \;
,当尝试进入该目录以查找更多项目时,find将崩溃,从而给您类似的错误find: '1/2/3/a': No such file or directory
。
illegal option --t
。我只好也通过目录(搜索stackoverflow.com/questions/25840713/...)rm -rf `find . -type d -name a`
。
我最终在这里寻找要删除的node_modules
文件夹,然后再使用备份正在进行的工作rsync
。一个关键要求是node_modules
文件夹可以嵌套,因此您需要此-prune
选项。
首先,我运行此命令以可视方式验证要删除的文件夹:
find -type d -name node_modules -prune
然后我运行此命令将其全部删除:
find -type d -name node_modules -prune -exec rm -rf {} \;
多亏了开心果
sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
find ./ -name "FOLDERNAME" | xargs rm -Rf
应该做到的。警告,如果您不小心抽了.
或/
入xargs rm -Rf
您的整个计算机中,则将被删除,并且没有将其恢复的选项,需要重新安装OS。
另一个:
"-exec rm -rf {} \;" can be replaced by "-delete"
find -type d -name __pycache__ -delete # GNU find
find . -type d -name __pycache__ -delete # POSIX find (e.g. Mac OS X)
-delete
不会删除非空文件夹。