我有一个大致如下的文件结构:

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

这些文件是ID3信息略有不同的音乐文件,因此fdupe不会将它们捕获为重复文件。我想从dir1中运行一个命令,该命令将递归到每个子目录中,找到所有文件的最大修改日期,然后提示删除任何修改日期早于最大修改日期的文件。
在linux中有这样做的方法吗?预期产出将是:
dir1
|--subdir1
   |--file1 (modified date1)
   |--file3 (modified date1)
|--subdir2
   |--file4 (modified date3)
   |--file6 (modified date3)

最佳答案

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

关于linux - 如何查找和删除重复项并保持最新状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39963961/

10-12 15:59