从目录及其子项中删除所有文件类型

时间:2011-08-17 16:48:18

标签: bash unix shell scripting

我的印象是

rm -r *.xml

会删除父母和子女的所有文件:

*.xml: No such file or directory

6 个答案:

答案 0 :(得分:45)

rm的手册页说:

 -r, -R, --recursive
          remove directories and their contents recursively

这意味着标志-r正在等待目录。 但*.xml不是目录。

如果要以递归方式从当前目录中删除所有.xml文件,请执行以下命令:

find . -name "*.xml" -type f|xargs rm -f

答案 1 :(得分:28)

我假设你想要递归删除所有*.xml个文件(在当前和所有子目录中)。为此,请使用find

find . -name "*.xml" -exec rm {} \;

另一方面,递归删除让我害怕。在我的日子里,我倾向于在那一步之前:

find . -name "*.xml" 

(没有-exec位)只是为了看看在跳跃之前可能会删除什么。我建议你这样做。你的文件会感谢你。

答案 2 :(得分:3)

更漂亮的方式,虽然这个在unix系统中得不到支持:

rm -rf */*.xml

这将从当前目录的所有子目录中删除xml文件。

答案 3 :(得分:3)

阅读this answer on finding empty directories unix,我刚刚了解了-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.

来源:man find

这意味着,您也可以递归删除所有xml文件:

find . -name "*.xml" -type f -delete

答案 4 :(得分:2)

ZSH递归起来救援!

调用zsh: zsh

请确保您已进入您打算进入的目录: cd wherever

首先列出: ls **/*.xml

删除: rm **/*.xml

我会抵制强烈诱惑bash,并指出有关主题here的相关zsh文档。

答案 5 :(得分:-1)

一个简单的方法是

  

rm -f * .xml

这将从当前目录中删除所有.xml文件。