2016-01-22 98 views
0

我试图从文件夹中列出的所有文件中删除包含基准名的每一行。使用sed从文本文件中删除多个文件名

我在文件夹中有2 000 000个文件,但应该有2 500 000个文件。我有一个逐行包含所有2.5M文件名的missing.txt文件。我想删除我已经有的所有行来重新启动我的进程并完成500 000个丢失的文件。

我非常简单的脚本是:

for FILE in ../pdb/*; do 
BNAME="$(basename ${FILE} _mini.pdb)" 
sed "/${BNAME}/d" ./missing.txt 
done 

的问题是,SED不删除missing.txt文件中的$ BNAME线。我在做什么错误的sed?

回答

1

我会用不同的方法:

首先创建当前文件的排序列表:ls | sort > new_list.txt。它应该包含~2毫米的行。

然后排序2.5毫升文件列表sort missing.txt > old_list.txt

最后提取的区别:comm -23 old_list new_list

它比2ML情况下更有效的sed的。

+0

或者只是使用'awk'或类似的“diff”这两个文件。 –

+0

missing.txt不包含扩展名文件。我已经尝试了../pdb/*中的FILE;做BNAME ='basename $ FILE .pdb'; echo $ BNAME >> missing.txt但它需要永远。我应该尝试使用sed为每一行添加.pdb扩展名吗? – Grego

+0

@Grego是的,我认为你应该。 – mauro