【问题标题】:Remove particular files in deep directory by rm command通过 rm 命令删除深层目录中的特定文件
【发布时间】:2013-07-04 12:30:09
【问题描述】:

我想删除特定目录中的所有 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.

【问题讨论】:

    标签: rm


    【解决方案1】:

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

    来自Bash reference manual

    globstar

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

    所以这应该可以工作

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

    或者使用finddelete 操作

    find . -name '*.png' -delete
    

    注意rm的“-r”开关:

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

    【讨论】:

      【解决方案2】:

      find . -name \*.png | xargs rm

      【讨论】:

      • 谢谢!我不知道'xargs'。似乎很方便。 :)
      【解决方案3】:
      find . -name "*.png" -exec rm -rf {} \;
      

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

      【讨论】:

      • 你可能不想要-r,因为它只适用于目录,而且你只想通过这个特定的练习来操作文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2012-09-19
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2019-03-08
      相关资源
      最近更新 更多