删除每个第X个文件的Linux脚本

时间:2017-05-26 11:38:05

标签: linux bash shell file

我正在制作一个间隔拍摄视频,但相机正在拍摄许多照片(最高时间为1pic / 60秒,但我只需要1pic / h)。所以我想保留每60张照片并删除剩下的文件。

是否有bash脚本或简单命令在目录中实现此目的?

1 个答案:

答案 0 :(得分:1)

答案:

find . -maxdepth 1 -type f -printf "%T+\t%p\n" | sort | cut -f 2 | awk 'NR % 60 != 0' | xargs -d '\n' rm -f

说明:

find . -maxdepth 1 -type f -printf "%T+\t%p\n" - 在当前目录(-type f)中找到所有常规文件. -maxdepth 1并打印出文件修改时间和文件名,由TAB分隔,每个文件一行(-printf "%T+\t%p\n"

sort - 按升序对结果列表进行排序(因为修改时间位于行的开头,这意味着首先是最旧的文件)。使用-r按相反顺序排序

cut -f 2 - 从列表中删除修改时间,只留下文件名(列表中的第二个字段)

awk 'NR % 60 != 0' - 从结果列表中删除每第60行

xargs -d '\n' rm -f - 对列表中剩下的每一行执行rm -f

最终结果是不删除每个第60个文件,删除当前目录中的每个其他常规文件。使用风险自负:)