我正在制作一个间隔拍摄视频,但相机正在拍摄许多照片(最高时间为1pic / 60秒,但我只需要1pic / h)。所以我想保留每60张照片并删除剩下的文件。
是否有bash脚本或简单命令在目录中实现此目的?
答案 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个文件,删除当前目录中的每个其他常规文件。使用风险自负:)