通过rm命令删除深层目录中的特定文件

时间:2013-07-06 17:13:03

标签: rm

我想删除特定目录中的所有png图像。

我有以下目录和图片,如何一次删除所有png文件?

.
├── 1
│   ├── 2
│   │   ├── 3
│   │   └── 3.png
│   └── 2.png
└── 1.png

我尝试了以下命令。

rm -rf *.png       #only 1.png was deleted.
rm -rf **/*.png    #only 2.png was deleted.
rm -rf **/**/*.png #only 3.png was deleted.

3 个答案:

答案 0 :(得分:2)

您需要设置globstar选项(在Bash 4中引入)才能使递归通配工作

来自Bash reference manual

  

globstar

     

如果设置,文件名扩展上下文中使用的模式“**”将匹配所有文件以及零个或多个目录和子目录。如果模式后跟'/',则只有目录和子目录匹配。

所以这应该有用

shopt -s globstar
rm -f **/*.png

或者使用finddelete操作

find . -name '*.png' -delete

关于rm

的“-r”开关的注释

-r切换“递归删除目录及其内容”(来源:man rm)。默认情况下,rm无法删除目录。交换机不会更改文件名扩展或通配的工作方式。

答案 1 :(得分:0)

find . -name \*.png | xargs rm

答案 2 :(得分:0)

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

这篇文章有一个非常相似的问题:How do I remove all .pyc files from a project?