在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命令,只过滤目录,根据名称进行过滤,执行rmdir命令:
find . -type d -name a -exec rmdir {} \;
如果您想要递归删除其内容,请将 -exec rmdir {} \;
替换为 -delete
或者 -prune -exec rm -rf {} \;
。其他答案包括有关这些版本的详细信息,请给予他们应有的荣誉。{} \;
是什么意思? - winklerrr{}
可以理解为“对于每个匹配的文件/文件夹”,即它代替了每个“找到”的文件/文件夹。\;
是 -exec
子句的终止符。 - wmorrison365-prune
标志。没有这个标志,find
仍将尝试访问现在已经丢失的文件夹,并最终以错误代码退出,这可能会导致Docker构建失败。 - Czyzby使用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 命令会通过替换执行每个文件。
1/2/a/3/4
这样的内容,而这可能不是预期的结果,因此强烈建议先进行测试。 - twalbergreco echo {}
进行测试,而不是 ls {}
。 - Charney Kayenode_modules/
文件夹。 - saruftwfind . -name a -type d -exec rm -rf {} \;
,它可以正常工作,尽管对于每个被删除的目录它都会输出 find: ‘./subdir/subdir/a’: No such file or directory
。 - pacoverflow这也可以使用-它将移除所有名为“a”的文件夹及其内容:
rm -rf `find . -type d -name a`
find . -name a -exec rm -rf {} \;
,当find
尝试进入该目录查找更多项目时,find
将崩溃,并显示类似于 find: '1/2/3/a': No such file or directory
的错误。请注意,此命令会递归地删除所有名为a
的文件或目录。 - Alex Grönholm.
--> rm -rf \
find . -type d -name a`` - I.G. Pascual我在这里想要删除我的node_modules
文件夹,在使用rsync
备份我的工作进展之前。一个关键要求是node_modules
文件夹可以嵌套,因此您需要使用-prune
选项。
首先,我运行以下命令以直观地验证要删除的文件夹:
find . -type d -name node_modules -prune
然后我运行了以下命令来删除它们:
find . -type d -name node_modules -prune -exec rm -rf {} \;
感谢pistache
#!/bin/bash
echo “找到 node_modules 目录:”;
find -type d -name node_modules -prune;
read -r -p “您是否真的想删除所有目录? [yes/no]” input;
if [ ! $input != "yes" ];
then
find -type d -name node_modules -prune -exec rm -rf {} \;;
fi
- Feirellfind . -type d -name node_modules -prune -exec rm -rf {} \;
- Christiaan Westerbeekpnpm
,它刚清理了我电脑上的150GB空间。谢谢这个建议。 - timhc22要删除所有名称为foo
的目录,请运行:
find -type d -name foo -a -prune -exec rm -rf {} \;
另外的答案缺少一个重要的东西: -prune
选项。 如果没有-prune
,GNU find将删除具有匹配名称的目录,然后尝试递归进入其中以查找更多符合条件的目录。 -prune
选项告诉它不要递归进入满足条件的目录。这个命令对我很有效。它能递归地完成工作。
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
- 当前文件夹
"node_modules" - 文件夹名称
find ./ -name "FOLDERNAME" | xargs rm -Rf
这应该可以解决问题。警告:如果您不小心将 .
或 /
传递给 xargs rm -Rf
,将会彻底删除整个计算机,而且无法恢复,需重新安装操作系统。
xargs
的方法,因为它易于理解和易于模拟运行。你可以通过使用-print0
和-0
(如这里所示)来解决“WARNING”问题。例如:find -type d -iname ".recycle" -print0 |xargs -0 -n1 rm -rf
。 - undefined结合多个答案,这里有一个可在Linux和MacOS上运行的命令。
rm -rf $(find . -type d -name __pycache__)
我有100多个像这样的文件:
log-12
log-123
log-34
....
以上的回答对我没有用,
但是以下的命令帮助了我。
find . -name "log-*" -exec rm -rf {} \;
我将-type
设置为.
,因此它会删除以log-
开头的所有文件和文件夹。
rm -rf
递归删除文件夹,即使其中包含文件也会被删除。
如果仅想删除文件夹:
find -type d -name "log-*" -exec rm -rf {} \;
仅限文件
find -type f -name "log-*" -exec rm -rf {} \;
另一个例子:
"-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
命令无法删除非空文件夹。 - maninak