在单独的文件中查找具有文件名例外列表的文件

在单独的文件中查找具有文件名例外列表的文件

我的目录中有 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选项以确保您的结果仅包含文件。

相关内容