【发布时间】:2015-11-29 06:41:06
【问题描述】:
我有一个文件列表 - 有些以 .txt 结尾,有些则不是。如何运行命令删除所有不以 txt 结尾的文件?
我试过了:
rm *.[^txt]
但这没有用?
【问题讨论】:
-
对于它的价值,您的尝试匹配名称以点作为倒数第二个字符以及除
t或x作为最终字符之外的任何文件(第二个t是多余的)。
标签: bash unix command-line sh
我有一个文件列表 - 有些以 .txt 结尾,有些则不是。如何运行命令删除所有不以 txt 结尾的文件?
我试过了:
rm *.[^txt]
但这没有用?
【问题讨论】:
t 或x 作为最终字符之外的任何文件(第二个t 是多余的)。
标签: bash unix command-line sh
如果你使用的是 bash,你可以打开extglob shell 选项:
shopt -s extglob
然后您可以使用扩展模式语法!(pattern) 来匹配所有与pattern 不匹配的文件名。首先,用echo进行测试:
echo !(*.txt)
假设输出是要删除的文件,扣动扳机:
rm !(*.txt)
【讨论】:
试试这个:
rm !(*.txt)
它应该删除所有不以 .txt 结尾的文件
首先执行shopt -s extglob 以确保启用扩展模式匹配功能。shopt -s 将向您显示所有启用的可选外壳行为。
【讨论】:
extglob 在任何地方都默认启用。