根据另一个文件中的文件名从目录中删除文件

时间:2017-10-30 08:08:06

标签: awk sed

我有一个目录,其中包含多个文件(~1000),其名称的格式为ABC.txt, ABC.1.txt, ABC.2.txt, XYZ.txt, XYZ.1.txt,依此类推。我想根据第一个索引考虑这些名称,如果我们将它们分割为{{1 }}。例如,然后名称将被读作ABC XYZ,依此类推。然后我想删除那些第一个索引在另一个(参考文件)中不存在的文件。鉴于上面提到的文件名,让我们说我的另一个(参考文件)只包含1个名称,即XYZ。因此,将保留在目录中的文件将是.XYZ.txt,其他所有不具有XYZ.1.txt的确切前缀的文件都将被删除。我说的确切,因为可能会有一个名为XYZ的文件,所以应该有一个完全匹配,以保留该文件。

任何人都可以帮助我。非常感谢你。

编辑:一个目录包含所有文件:XYZA.txt,参考文件在另一个目录中作为文件名ABC.txt, ABC.1.txt, ABC.2.txt, XYZ.txt, XYZ.1.txt,并且是包含其他目录文件的一列文件(前缀)名称为ABC,XYZ,CDE等。

1 个答案:

答案 0 :(得分:0)

for f in *.*; 
do if grep -qF "${f%%.*}" file; 
   then echo "skip $f"; 
   else echo "rm $f"; fi; 
done

使用文件名中的点搜索所有文件,将前缀提取到第一个点,在文件中按字面意义进行比较,不要删除名称,并回显rm file命令。确保带有名称的文件没有点,否则它也会被删除。

如果看起来很好,请在echo之前删除rm