我正在尝试从文件搜索中排除某个字符串。
假设我有一个文件列表:file_Michael.txt,file_Thomas.txt,file_Anne.txt。
我希望能够写出类似
的内容ls *<and not Thomas>.txt
给我file_Michael.txt和file_Anne.txt,但不是file_Thomas.txt。
反过来很简单:
ls *Thomas.txt
使用单个字符进行操作也很简单:
ls *[^s].txt
但如何用字符串做?
塞巴斯蒂安
答案 0 :(得分:16)
您可以使用find执行此操作:
$ find . -name '*.txt' -a ! -name '*Thomas.txt'
答案 1 :(得分:14)
使用Bash
shopt -s extglob
ls !(*Thomas).txt
其中第一行表示“设置扩展通配”,有关详细信息,请参阅manual。
其他一些方法可能是:
find . -type f \( -iname "*.txt" -a -not -iname "*thomas*" \)
ls *txt |grep -vi "thomas"
答案 2 :(得分:2)
如果要循环通配符,只要有想要排除的内容,就跳过剩下的迭代。
for file in *.txt; do
case $file in *Thomas*) continue;; esac
: ... do stuff with "$file"
done