删除/移动具有文件名时间戳模式的目录中的文件

删除/移动具有文件名时间戳模式的目录中的文件

所以我有需要删除/移动/过滤的文件。

目录中的所有文件都具有这样的模式,假设目录frames包含此模式 filename timestamp_in_nanosecond.jpg

这是使用 ls 中的管道尾部的文件示例。ls | tail。 (我使用 tail 是因为 ls 太慢,可能是因为要列出的文件太多)。

.../uwc/frames $ ls | tail
1660649146201561661.jpg
1660649146411875151.jpg
1660649146622526505.jpg
1660649146832063432.jpg
1660649147042957234.jpg
1660649147254488848.jpg
1660649147466753015.jpg
1660649147889093171.jpg
1660649148193314525.jpg
1660649148786199681.jpg

如果我想将文件移动到另一个目录(例如frames2指定范围,如下所示),该怎么办:

 From  1660649147000000000.jpg
 Until 1660649148000000000.jpg

因此,frames2dir 将仅包含这些文件:

1660649147042957234.jpg
1660649147254488848.jpg
1660649147466753015.jpg
1660649147889093171.jpg

答案1

使用通配符

mv 1660649147?????????.jpg frames2/

取决于您是否打算包括上限,也许还包括

mv 1660649148000000000.jpg frames2/

如果文件太多,通配符无法在缓冲区空间不足的情况下匹配,请改用find

find . -name 'frames2' -prune -o -name '1660649147?????????.jpg' -exec mv -t frames2/ {} +

笔记

  1. -name 'frames2' -prune子句防止find下降到frames2子目录。如果实际上在其他地方,则不需要它(或-o“或”) 。frames2
  2. 如果您mv没有 GNU 扩展-t,请将-exec子句更改为-exec mv {} frames2/ \;,但要意识到这将需要相当长的时间才能完成。

在所有情况下,您都可以修改mvecho mv查看所选文件集,而无需实际移动它们。

相关内容