我的印象是
rm -r *.xml
会删除父母和子女的所有文件:
*.xml: No such file or directory
答案 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文件。