我有一个目录,其中包含多个文件(~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等。
答案 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
。