【问题标题】:delete files with specific string in the filename [closed]删除文件名中具有特定字符串的文件[关闭]
【发布时间】:2012-09-26 04:32:17
【问题描述】:

如何删除包含字符串作为嵌入字符串的文件,除非在 使用通配符开始或结束。

我是一个业余爱好者,开始使用 Ubuntu 不到一个月。

【问题讨论】:

    标签: linux shell ubuntu


    【解决方案1】:
    rm ?*foo?*
    

    删除包含 foo 的文件,前提是前后至少有一个字符,因此“foobar”和“barfoo”不会被删除,而“barfoobar”会被删除。

    作为预防措施,请这样做

    ls ?*foo?*

    首先要确保您没有删除错误的内容。并且要非常小心,不要意外包含任何空格,因为 rm ?* foo?* 几乎可以肯定是非常糟糕的。为了提供一些保护,请将参数用引号括起来,因此

    rm "?*foo?*"
    

    【讨论】:

    • 啊,老 foobarfoobarfoo 悖论 :-) 我暂时假设 OP 也希望删除。
    • :)))) 这个问题有什么解决办法吗?
    • 请先调用 ls。 rm -v ?*(1)?* 没有做任何我想做的事情。我忘了转义括号。
    【解决方案2】:

    我认为这对于单一的扩展模式是不可能的。您可以改用grep 进行过滤:

    ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm
    

    所以ls 列出了包含foo 的所有内容,然后egrep 删除了开头/结尾匹配的文件,最后xargs 对每个剩余部分运行一个命令(在这种情况下为rm)。

    The dangerous thing about this technique 是文件名可能包含特殊字符,如换行符或星号,因此使用风险自负!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多