ファイル名タイムスタンプパターンを使用してディレクトリからファイルを削除/移動する

ファイル名タイムスタンプパターンを使用してディレクトリからファイルを削除/移動する

そのため、削除/移動/フィルタリングが必要なファイルがあります。

ディレクトリにframesこのパターンfilenameが含まれていると仮定すると、ディレクトリ内のすべてのファイルにこれらのパターンがありますtimestamp_in_nanosecond.jpg

以下は、lsでパイプの尾を使用するファイルの例です。ls | tail。 (lsが遅すぎるため、tailを使用します。おそらくリストするファイルが多すぎるからです)。

.../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. mvGNU拡張がない場合は、句をに変更してください。ただし-t、完了に時間がかなりかかることに注意してください。-exec-exec mv {} frames2/ \;

すべての場合に、実際にファイルを移動せずに選択したファイルセットを表示できるmvように変更できます。echo mv

関連情報