【问题标题】:Removing files without a specific extension删除没有特定扩展名的文件
【发布时间】:2015-11-29 06:41:06
【问题描述】:

我有一个文件列表 - 有些以 .txt 结尾,有些则不是。如何运行命令删除所有不以 txt 结尾的文件?

我试过了:

rm *.[^txt]

但这没有用?

【问题讨论】:

  • 对于它的价值,您的尝试匹配名称以点作为倒数第二个字符以及除t 或x 作为最终字符之外的任何文件(第二个t 是多余的)。

标签: bash unix command-line sh


【解决方案1】:

如果你使用的是 bash,你可以打开extglob shell 选项:

shopt -s extglob

然后您可以使用扩展模式语法!(pattern) 来匹配所有与pattern 不匹配的文件名。首先,用echo进行测试:

echo !(*.txt)

假设输出是要删除的文件,扣动扳机:

rm !(*.txt)

【讨论】:

    【解决方案2】:

    试试这个:

    rm !(*.txt)
    

    它应该删除所有不以 .txt 结尾的文件

    首先执行shopt -s extglob 以确保启用扩展模式匹配功能。
    shopt -s 将向您显示所有启用的可选外壳行为。

    【讨论】:

    • 我在我的 Mac 上使用终端。我得到了“-bash: !: event not found”
    • 然后先使用 shopt -s extglob。我已经更新了答案
    • 它几乎不是 OSX 特有的;我不认为extglob 在任何地方都默认启用。
    • @tripleee 是的,你是对的。可能是我很久以前在我的系统上启用了这个,所以 rm 命令对我来说很好用。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2016-01-06
    相关资源
    最近更新 更多