在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命令?
使用find查找名称“a”,并执行rm根据您的意愿删除名称,如下所示:
find . -name a -exec rm -rf {} \;
首先使用ls来测试它:
find . -name a -exec ls {} \;
为了确保只删除目录而不是普通文件,使用"-type d"参数(正如注释中建议的那样):
find . -name a -type d -exec rm -rf {} \;
“{}”是对找到的每个文件“a”的替换——exec命令通过替换对每个文件执行。
如果目标目录为空,使用find,只过滤目录,按名称过滤,执行rmdir:
find . -type d -name a -exec rmdir {} \;
如果你想递归删除它的内容,替换-exec rmdir {} \;使用-delete或-prune -exec rm -rf {} \;其他答案包括关于这些版本的细节,也要给它们署名。
find ./ -name "FOLDERNAME" | xargs rm -Rf
应该能行。警告,如果你不小心抽。或/ into xargs rm -Rf您的整个计算机将被删除,没有选项可以恢复,需要重新安装操作系统。
我有100多个文件
log-12
log-123
log-34
....
以上答案对我不起作用
但是下面的命令帮助了我。
find . -name "log-*" -exec rm -rf {} \;
我给出- as。所以它会删除以log-开头的文件和文件夹
rm -rf递归删除文件夹,即使它有文件。
如果你只想要文件夹
find -type d -name "log-*" -exec rm -rf {} \;
单独文件
find -type f -name "log-*" -exec rm -rf {} \;
删除所有名为foo的目录,执行命令:
find -type d -name foo -a -prune -exec rm -rf {} \;
其他答案都忽略了一个重要的东西:-prune选项。如果没有-prune, GNU find将删除具有匹配名称的目录,然后尝试递归到该目录中以查找更多匹配的目录。prune选项告诉它不要递归到匹配条件的目录中。
另一个:
"-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)
在使用rsync对正在进行的工作进行备份之前,我在这里试图删除node_modules文件夹。一个关键要求是node_modules文件夹可以嵌套,因此需要使用-prune选项。
首先,我运行这个来直观地验证要删除的文件夹:
find . -type d -name node_modules -prune
然后我运行这个程序将它们全部删除:
find . -type d -name node_modules -prune -exec rm -rf {} \;
多亏了开心果
这个命令对我有用。它以递归的方式工作
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
. -当前文件夹
"node_modules" -文件夹名称
之前的注释对我不起作用,因为我在结构中的某个文件夹中的文件夹名称中寻找表达式
下面的代码适用于如下结构的文件夹:
B /d/ab/cd/file或c/d/e/f/a/f/file
使用rm-rf前检查
find . -name *a* -type d -exec realpath {} \;
递归地删除包含内容的文件夹
find . -name *a* -type d -exec rm -rf {} \;