删除特定文件

删除特定文件

在这个目录中/home/Scrivania/pdb_files,我有一个具有相同文件名格式的文件列表,XXX_?.pdb.

例如,

A4R_A.pdb 
A4R_B.pdb
A4R_C.pdb
TY6_A.pdb
001_A.pdb
001_B.pdb
ATE_B.pdb

我只需要保留其中一些文件并删除其他文件。特别是,如果我有多个名称前三个字符相同的文件,我只想保留一个,而不管最后一个字符“ ?”。

所以最后,在我的目录中,我应该只有这些文件:

A4R_A.pdb 
TY6_A.pdb
001_A.pdb
ATE_B.pdb

并删除这些:A4R_B.pdb, A4R_C.pdb,001_B.pdb

保留哪一个具有前三个相同字符的文件并不重要(ABC)。另外,可能还有其他情况,字符“ ?”不是字母,而是数字,或者可能是与 A、B 或 C 不同的字母。

因此,选择必须完全基于前三个字符。例如,对于具有前三个相同字符的更多文件,一种策略是仅保留您遇到的第一个文件。

有人可以建议一个 bash 脚本可以做到这一点吗?

答案1

尝试这个,

for dup in $(ls  *.pdb | awk 'BEGIN{FS="_"}{if (++dup[$1] >= 2) print}')
do
   rm -f $dup; 
done
  • FS="_"保留下划线作为字段分隔符。
  • (++dup[$1] >= 2)如果计数器大于或等于 2,将打印完整文件名,只有那些输入将传递到循环for以删除文件

答案2

您可以在更改到相关目录后执行此操作。对于前 3 个字母的每次出现,它将保留第一个按字母顺序排列的文件。

printf "%s\n" ???_?.pdb | awk -F_ 'seen[$1]++' | xargs echo rm --

echo测试后移除。上述awk命令仅过滤前 3 个字母与前一个字母相同的文件名,因此允许它们通过删除。

相关内容