我正在制作Timelapse视频,但相机正在拍摄很多照片(最高时间为1pic/60秒,但我只需要1pic/h)。所以我想保留每一张第60张照片并删除其余的文件。删除每个第X个文件Linux脚本
是否有一个bash脚本或简单的命令来实现这个目录?
我正在制作Timelapse视频,但相机正在拍摄很多照片(最高时间为1pic/60秒,但我只需要1pic/h)。所以我想保留每一张第60张照片并删除其余的文件。删除每个第X个文件Linux脚本
是否有一个bash脚本或简单的命令来实现这个目录?
答:
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"
- 查找所有常规文件在当前目录(. -maxdepth 1
)(-type f
),并打印出文件的修改时间和文件名,用TAB分隔,每个文件一行(-printf "%T+\t%p\n"
)
sort
- 按升序对结果列表进行排序(因为修改时间在行首,这意味着最早的文件在第一行)。使用-r
以相反的顺序
cut -f 2
排序 - 从列表中删除的修改时间,只保留了文件名(第二个字段列表)
awk 'NR % 60 != 0'
- 从结果列表
xargs -d '\n' rm -f
- 因为这是在列表中
最终的结果是,每60文件不会被删除,在当前目录中的所有其他常规文件被删除留下的每一行执行rm -f
。使用您自己的风险:)
什么是文件名,你如何确定哪个是第n个文件? – 123
想想像使用cmin和delete标志一样使用find –