我的目录中有 10 个文件..
test1.txt
test2.txt
test3.txt
.
.
test10.txt
还有一个排除文件名exclusion.txt,其文件名如下
test1.txt
test2.txt
test3.txt
text4.txt
我需要一个 find 命令,从排除文件中排除文件名并提供结果。
test5.txt
test6.txt
test7.txt
text8.txt
test9.txt
text10.txt
答案1
for file in *.txt;do grep ${file} exclude.txt >/dev/null;r=${?}; if [ $r -ne 0 ]; then echo ${file};fi;done| grep -v exclude.txt
如果您的 except.txt 不在同一目录中,您可以省略grep
管道后的最后一个命令|
答案2
这不太漂亮,但完成了工作:)
find . -regextype posix-extended \! -regex "\./($(cat exclude.txt | tr '\n' '|')).*$"
注意:只有当 except.txt 的最后一行没有 NEWLINE 时,这才有效。
答案3
您可以运行find
命令,然后grep
对文本文件中列出的文件执行相反的操作:
find | grep -v -f exclude.list
然而,这也会排除具有所述名称的目录,例如dir/test1.txt/actual_file
,即不限于结果的最后部分的文件find
。
要解决此问题,请添加$
到排除列表条目的末尾,以确保它们仅在行尾匹配:
test1.txt$
等等。
在飞行中这看起来像
find | grep -v -f <( sed 's/$/$/' exclude.list )
也许还可以添加-type f
选项以确保您的结果仅包含文件。