在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
Run Code Online (Sandbox Code Playgroud)
我应该从父文件夹使用什么Linux命令?
wmo*_*365 142
使用find for name"a"并执行rm以删除根据您的意愿命名的内容,如下所示:
find . -name a -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
首先使用ls列出测试:
find . -name a -exec ls {} \;
Run Code Online (Sandbox Code Playgroud)
要确保这只删除目录而不删除普通文件,请使用"-type d"arg(如注释中所示):
find . -name a -type d -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
"{}"是找到的每个文件"a"的替换 - exec命令是通过替换对每个文件执行的.
pis*_*che 133
如果目标目录为空,请使用find,仅使用目录过滤,按名称过滤,执行rmdir:
find . -type d -name a -exec rmdir {} \;
Run Code Online (Sandbox Code Playgroud)
如果要递归删除其内容,请替换-exec rmdir {} \;
为-delete
或-prune -exec rm -rf {} \;
.其他答案包括有关这些版本的详细信息.
Ara*_*uhi 53
这也有效 - 它将删除所有名为"a"的文件夹及其内容:
rm -rf `find -type d -name a`
Run Code Online (Sandbox Code Playgroud)
Dav*_*son 22
要删除名称中的所有目录foo
,请运行:
find -type d -name foo -a -prune -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
其他答案缺少一个重要的事情:-prune
选项.如果没有-prune
,GNU find将删除具有匹配名称的目录,然后尝试递归到它以查找更多匹配的目录.该-prune
选项告诉它不要递归到与条件匹配的目录中.
1ns*_*nct 17
这个命令对我有用。它递归地完成它的工作
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
Run Code Online (Sandbox Code Playgroud)
. - 当前文件夹
“node_modules” - 文件夹名称
mpa*_*bo7 14
我最终在这里想要删除我的node_modules
文件夹,然后再使用我正在进行的工作备份rsync
.关键要求是node_modules
文件夹可以嵌套,因此您需要该-prune
选项.
首先,我运行此操作以直观地验证要删除的文件夹:
find -type d -name node_modules -prune
Run Code Online (Sandbox Code Playgroud)
然后我运行它来删除所有:
find -type d -name node_modules -prune -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
感谢开心果
小智 13
结合多个答案,这是一个适用于 Linux 和 MacOS 的命令
rm -rf $(find . -type d -name __pycache__)
Run Code Online (Sandbox Code Playgroud)
Sle*_*vin 11
find ./ -name "FOLDERNAME" | xargs rm -Rf
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.警告,如果您不小心将一台.
或一台泵/
送到xargs rm -Rf
您的整台计算机,将被删除而无需将其取回,需要重新安装操作系统.
我有超过100个文件
log-12
log-123
log-34
....
Run Code Online (Sandbox Code Playgroud)
以上答案对我不起作用
但以下命令帮助了我.
find . -name "log-*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
我给-type
的.
,因此删除与启动文件和文件夹log-
并rm -rf
递归删除文件夹,即使它有文件.
如果你想单独的文件夹
find -type d -name "log-*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
单独的文件
find -type f -name "log-*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
小智 7
另一个:
"-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)
Run Code Online (Sandbox Code Playgroud)