所以我有需要删除/移动/过滤的文件。
目录中的所有文件都具有这样的模式,假设目录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
因此,frames2
dir 将仅包含这些文件:
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/ {} +
笔记
- 该
-name 'frames2' -prune
子句防止find
下降到frames2
子目录。如果实际上在其他地方,则不需要它(或-o
“或”) 。frames2
- 如果您
mv
没有 GNU 扩展-t
,请将-exec
子句更改为-exec mv {} frames2/ \;
,但要意识到这将需要相当长的时间才能完成。
在所有情况下,您都可以修改mv
以echo mv
查看所选文件集,而无需实际移动它们。