如何查找和删除重复项并保持最新状态?

时间:2016-10-10 17:49:14

标签: linux bash

我的文件结构大致如下:

dir1
|--subdir1
   |--file1 (modified date1)
   |--file2 (modified date2)
   |--file3 (modified date1)
|--subdir2
   |--file4 (modified date3)
   |--file5 (modified date4)
   |--file6 (modified date3)

这些文件是ID3信息稍有​​不同的音乐文件,因此fdupes不会将它们视为重复项。我想从dir1运行一个命令,它将递归到每个子目录,找到所有文件的最大修改日期,然后提示删除任何修改日期早于最大值的文件。

有没有办法在linux中执行此操作?预期的输出是:

dir1
|--subdir1
   |--file1 (modified date1)
   |--file3 (modified date1)
|--subdir2
   |--file4 (modified date3)
   |--file6 (modified date3)

1 个答案:

答案 0 :(得分:0)

stat -c %Y <file>会在Epoch之后的几秒钟内为您提供上次修改文件的时间。要查找“最多修改日期”,请执行以下操作: (我假设是最新修改):

for i in `ls -1 subdir1/`; do stat -c %Y subdir1/${i} >> mod_dates.txt;done
latest_mod=`cat mod_dates.txt | sort -nr | head -n 1`

删除旧文件:

for i in `ls -1 subdir1/`; do if [[ `stat -c %Y $i` -lt $latest_mod ]]; then rm subdir1/${i};fi;done