我有以下情况,
在此路径中,我有以下文件:
ENTRY/ORDERNUMBER_20181016000057.XML
ENTRY/ORDERNUMBER_20181016000058.XML
ENTRY/ORDERNUMBER_20181016000059.XML
ENTRY/ORDERNUMBER_20181016000157.XML
ENTRY/ORDERNUMBER_20181016000158.XML
ENTRY/ORDERNUMBER_20181016000159.XML
ENTRY/ORDERNUMBER_20181016000257.XML
ENTRY/ORDERNUMBER_20181016000258.XML
ENTRY/ORDERNUMBER_20181016000259.XML
另一方面,我将以下文件名放入列表中(实际上是txt文件):
ENTRY/ORDERNUMBER_20181016000057.XML
ENTRY/ORDERNUMBER_20181016000058.XML
ENTRY/ORDERNUMBER_20181016000059.XML
ENTRY/ORDERNUMBER_20181016000157.XML
ENTRY/ORDERNUMBER_20181016000158.XML
ENTRY/ORDERNUMBER_20181016000159.XML
因此,我们的想法是仅获取不匹配的文件。即:
ENTRY/ORDERNUMBER_20181016000257.XML
ENTRY/ORDERNUMBER_20181016000258.XML
ENTRY/ORDERNUMBER_20181016000259.XML
我尝试使用:
find ENTRY -name "ORDERNUMBER*" | grep -v "ORDERNUMBER*" Exclude.txt
但是我没有任何文件。
您知道我在做什么错吗?
最诚挚的问候!
答案 0 :(得分:2)
什么
grep -v "ORDERNUMBER*" Exclude.txt
是从Exclude.txt
打印与正则表达式ORDERNUMBER*
不匹配的所有行。不会读取通过管道来自查找的标准输入。
文件中的所有行均包含字符串ORDERNUMBER
,该字符串与模式匹配,因此结果为空。
要将文件视为模式列表,并将stdin用作要匹配的文件,请使用
find ENTRY -name "ORDERNUMBER" 2>>/dev/null | grep -f Exclude.txt -v
@frank建议。或尝试diff:
find ENTRY -name "ORDERNUMBER" 2>>/dev/null | diff Exclude.txt -
答案 1 :(得分:1)
如果您在1.txt
中有第一个文件列表,而在exclude.txt
中有第二个列表,则可以使用join
命令:
join -v 1 1.txt exclude.txt
现在,我们可以使用流程替换将命令的结果直接传递给join
了-即<()
-给我们:
join -v 1 <(find ENTRY -name "ORDERNUMBER*") exclude.txt
答案 2 :(得分:1)
尝试一下
find _dir_ -type f -exec /bin/bash -c '[[ $(grep -c '{}' filelist.txt) -eq 0 ]] && echo '{} \;
其中 dir 是包含文件的任何目录。
查找将遍历 dir 目录中的所有内容,并处理找到的每个文件。查找中的执行程序运行一个内联bash脚本,该脚本会在filelist.txt中查找查找当前正在处理的文件的名称。如果该文件不在您的filelist.txt文件中,则会将其打印出来。
希望这会有所帮助。
答案 3 :(得分:-1)
尝试
find ENTRY -name "ORDERNUMBER" 2>>/dev/null | grep -f Exclude.txt -v
答案 4 :(得分:-1)
您可以尝试使用awk:
find ENTRY -name "ORDERNUMBER*" | awk 'NR==FNR{a[$0];next}!($0 in a)' exclude.txt -
答案 5 :(得分:-1)
如果您在ENTRY目录的父目录中,则此Perl一线解决方案可以使用。
> ls -1 ENTRY/*
ENTRY/ORDERNUMBER_20181016000057.XML
ENTRY/ORDERNUMBER_20181016000058.XML
ENTRY/ORDERNUMBER_20181016000059.XML
ENTRY/ORDERNUMBER_20181016000157.XML
ENTRY/ORDERNUMBER_20181016000158.XML
ENTRY/ORDERNUMBER_20181016000159.XML
ENTRY/ORDERNUMBER_20181016000257.XML
ENTRY/ORDERNUMBER_20181016000258.XML
ENTRY/ORDERNUMBER_20181016000259.XML
> cat entry.txt
ENTRY/ORDERNUMBER_20181016000057.XML
ENTRY/ORDERNUMBER_20181016000058.XML
ENTRY/ORDERNUMBER_20181016000059.XML
ENTRY/ORDERNUMBER_20181016000157.XML
ENTRY/ORDERNUMBER_20181016000158.XML
ENTRY/ORDERNUMBER_20181016000159.XML
> perl -ne 'BEGIN {@f1=qx(ls ENTRY/*);@f2=qx(cat entry.txt);@diff{@f1}=undef;delete @diff{@f2};foreach( keys %diff){print}exit}'
ENTRY/ORDERNUMBER_20181016000258.XML
ENTRY/ORDERNUMBER_20181016000259.XML
ENTRY/ORDERNUMBER_20181016000257.XML
>