Files

使用文件名過濾器刪除/移動目錄中的文件

  • August 16, 2022

所以我有需要刪除/移動/過濾的文件。

所有文件在一個目錄中都有這樣的模式,假設目錄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

使用萬用字元

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查看所選文件集,而無需實際移動它們。

引用自:https://unix.stackexchange.com/questions/713856