【问题标题】:How to recursively delete multiple files with different extensions?如何递归删除具有不同扩展名的多个文件?
【发布时间】:2014-07-26 08:55:05
【问题描述】:

我正在尝试编写一个命令,以递归方式从当前目录及其所有相关子目录中删除多个具有不同扩展名(*.extension1、*.extension2 等)的文件。

到目前为止,我从 another post 获得了这个命令,但我无法确定如何在同一命令行中将其调整为多个文件:

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

就这么简单吗?

find . -name "*.extension1";"*.extension2" -type f -delete

作为旁注,这些都是我不需要的输出文件,但并非所有文件都必须始终输出,因此某些扩展名可能不存在。这就像一个一般的清理命令。

【问题讨论】:

    标签: linux bash find delete-file


    【解决方案1】:

    只需添加更多选项。也可以应用正则表达式解决方案,但这个解决方案更好更安全。

    find . \( -name '*.ext1' -or -name '*.ext2' \) -type f -delete
    

    编辑:您可能还需要-or。在删除之前,先在没有-delete 选项的情况下对其进行测试。 (2) 根据 gniourf_gniourf 的建议添加了一对()

    【讨论】:

    • 感谢您的回复。第一次迭代不起作用,再次尝试发布编辑。
    • 不,不幸的是它仍然无法正常工作。我也试过"*.ext1"
    • @Fiztban 您的find 可能不是基于 GNU 的或者是旧版本。您可以尝试其他建议。
    • find . \(-name '*.ext1' -o -name '*.ext2' \) -type f -delete 否则-type f -delete 仅适用于-name '*.ext2'。请注意,-or 不是 POSIX。请改用-o
    • @gniourf_gniourf 我明白了。好建议。我实际上尝试过获得相同的输出,但从没想过它实际上有区别。或者我应该说我忘记了。
    【解决方案2】:

    也许正则表达式会帮助你

    find . -regextype posix-awk -regex "(.*.ext1|.*.ext2)" -type f -delete
    

    【讨论】:

      【解决方案3】:
      find . \( -name "*.extension1" -o -name "*.extension2" \) -type f -delete
      

      查找文档 (-name ".py" -o -name ".html" ) -exec 文件 {} \;

      find . -regextype posix-egrep -regex ".*\.(extension1|extension2)$" -type f -delete
      

      【讨论】:

      • 你好@BroSlow,我不确定你到底在问我什么。第一个建议没有奏效。第二个做到了。
      • @Fiztban 我想 BrowSlow 问过我。
      • 对不起,我刚刚意识到有些文件的扩展名是不可预测的,但在扩展名之前,例如 mpd2.xxxxxxxxx,其中 xxx 是随机生成的输出。您能否提供一种删除它们的方法,或者将其作为第二个命令更容易?
      • @Fiztban 所以你说扩展名应该是extensionsxxx 对吧?这里xxx 将具有任何价值。
      • @Fiztban 如果我理解正确,那么你的输出文件就像*.check *.err 有时你得到像mpd2.xxx_ext 但这里_ext 是固定的,xxx 有随机值。我说的对吗?
      【解决方案4】:

      这个简单的命令将递归地删除该目录中所有扩展名 1 和扩展名 2 的文件。 rmfind . -name *.extension1 -o -name *.extentions2

      【讨论】:

        【解决方案5】:

        使用rm的另一种解决方案:

        rm -rf ./**/*.{txt,nfo,jpg,jpeg,png,exe,url}
        

        如果您也想删除其他文件,例如那些以sample. 开头的也加一下:

        rm -rf ./**/*.{txt,nfo,jpg,jpeg,png,exe,url} ./**/*/sample.*
        

        【讨论】:

          猜你喜欢
          • 2012-11-29
          • 1970-01-01
          • 2020-03-25
          • 1970-01-01
          • 2017-05-29
          • 2020-07-20
          • 1970-01-01
          • 2020-06-02
          • 2011-06-06
          相关资源
          最近更新 更多