如何使用通配符删除包含字符串作为嵌入字符串的文件,除了开头或结尾之外。
我是一个业余爱好者,开始 Ubuntu 还不到一个月。
rm ?*foo?*
删除包含 foo 的文件,前提是前后至少有一个字符,因此“foobar”和“barfoo”不会被删除,而“barfoobar”会被删除。
作为预防措施,请执行
ls ?*foo?*
首先要确保您没有删除错误的内容。并且要非常小心,不要意外包含任何空格,因为rm ?* foo?*几乎可以肯定是非常糟糕的。为了提供一些保护,请将参数用引号括起来,因此
rm "?*foo?*"
我认为这不可能通过单一的扩展模式实现。您可以grep
改为使用过滤:
ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm
因此,ls
列出所有包含的内容foo
,然后egrep
删除开头/结尾匹配的文件,最后在每个剩余部分上xargs
运行一个命令(rm
在这种情况下)。
这种技术的危险之处在于文件名可能包含特殊字符,如换行符或星号,因此使用风险自负!