仅为每个文件保留一个版本并删除其他文件

时间:2015-01-30 05:30:34

标签: linux unix search

我有n个文件的列表,有些文件是重复的(只有时间戳不同)。如何只保留1份副本并删除其他副本?

文件格式 - x_y_z_timestamp.tgz x1_y1_z1_timestamp.tgz ... xn_yn_zn_timestamp.tgz

e.g。

  1. x_y_z_20150113060314.tgz
  2. x_y_z_20150113114533.tgz
  3. x1_y1_z1_20150113060314.tgz
  4. x1_y1_z1_20150113114533.tgz
  5. x2_y2_z2_20150113060314.tgz
  6. x2_y2_z2_20150113114533.tgz
  7. 结果 -

    1. x_y_z_20150113114533.tgz
    2. x1_y1_z1_20150113114533.tgz
    3. x2_y2_z2_20150113114533.tgz

2 个答案:

答案 0 :(得分:0)

mv x_y_z_20150113060314.tgz copy_x_y_z_20150113060314.tgz; rm x_y_z*; mv copy_x_y_z_20150113060314.tgz x_y_z_20150113060314.tgz

说明:

  1. mv x_y_z_20150113060314.tgz copy_x_y_z_20150113060314.tgz     

将您不想删除的文件复制到文件名不符合模式x_y_z的d / t文件中。

  1. rm x_y_z*;
    删除以名称模式x_y_z*;

  2. 开头的所有文件
  3. mv copy_x_y_z_20150113060314.tgz x_y_z_20150113060314.tgz
    将要保留的文件重命名为其原始名称

答案 1 :(得分:0)

按照前缀列出它们:

ls x_y_z_* > test

按逆序排序结果:

sort -r test > test.sorted

删除除第一个文件以外的所有文件:

rm `tail +2 test.sorted`

当然,您可以将所有内容组合成一个命令。