Bash 从目录及其子目录中删除所有文件类型
我的印象是Bash 从目录及其子目录中删除所有文件类型,bash,unix,shell,scripting,Bash,Unix,Shell,Scripting,我的印象是 rm -r *.xml 将从父级和子级删除所有文件,但是: *.xml: No such file or directory 我假设您希望递归地删除所有*.xml文件(在当前和所有子目录中)。为此,请使用: 另一方面,递归删除让我害怕。在我理智的日子里,我倾向于在这一步之前: find . -name "*.xml" (不带-exec位)只是看看在进行跳跃之前可能会删除哪些内容。我建议你也这样做。您的文件将感谢您。rm的手册页上写着: -r, -R, --recursiv
rm -r *.xml
将从父级和子级删除所有文件,但是:
*.xml: No such file or directory
我假设您希望递归地删除所有
*.xml
文件(在当前和所有子目录中)。为此,请使用:
另一方面,递归删除让我害怕。在我理智的日子里,我倾向于在这一步之前:
find . -name "*.xml"
(不带
-exec
位)只是看看在进行跳跃之前可能会删除哪些内容。我建议你也这样做。您的文件将感谢您。rm的手册页上写着:
-r, -R, --recursive
remove directories and their contents recursively
这意味着标志-r
需要一个目录。
但是*.xml
不是目录
如果要递归地从当前目录中删除所有.xml文件,请执行以下命令:
find . -name "*.xml" -type f|xargs rm -f
更漂亮的方式,尽管unix系统不太支持这种方式:
rm -rf */*.xml
这将从当前目录的所有子目录中删除xml文件。阅读,我刚刚了解了-delete操作:
-delete
Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it even‐
tually exits). Use of -delete automatically turns on the -depth option.
Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐
ing points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot usefully use -prune and -delete together.
资料来源:ManFind
也就是说,您还可以按如下方式递归删除所有xml文件:
find . -name "*.xml" -type f -delete
一个简单的方法是
rm-f*.xml
这将从当前目录中删除所有.xml文件。ZSH递归全局搜索拯救 调用zsh:
zsh
确保您处于您想要进入的目录中:
cd无论何处
首先列出:
ls**/*.xml
删除:
rm**/*.xml
我将抵制强烈的诱惑,不去抨击
bash
,只需指向相关的zsh文档就可以了。是的,我想针对几种不同的类型。但是,您的脚本似乎在Bash中不起作用。您不需要逃避{}
-原始版本很好-OP可能只是打错了。是的,这对我来说很有效,因为我有一堆带有spaceshelpful的文件路径,在删除之前需要注意。无需调用xargs;使用find-exec
@noa..我知道…在unix中有很多方法可以做类似的事情。这取决于OP选择使用哪种方法。我刚刚给出了我经常使用的方法。@noa实际上xargs
更有效-exec
为每个匹配的文件调用rm
,而xargs
则分批执行。当有很多文件时,这会产生很大的不同。有趣。这是有道理的。xargs
如果您使用-P
选项并行运行任务,对于昂贵的操作可能会更有效,但在这种情况下可能不会有太大的区别。然而,我同意@Rahul的观点,用户喜欢什么取决于他们,人们可以说find…| xargs…
的语法比find更容易记住-执行。。。{} \;代码>。(因此+1)这对深度超过2层的目录树有效吗?这应该是投票最多的答案,比管道到xargs容易得多
find . -name "*.xml" -type f -delete