ファイル名に含まれる日付/時刻順にファイルをコピーしますか?

ファイル名に含まれる日付/時刻順にファイルをコピーしますか?

次のパターンを持つファイルがたくさんあります。

{UID}-YYMMDD-HHMMSSMM-NEW.xml

または実際の例:

56959-140918-12465122-NEW.XML

ファイル名に含まれる日時順にこのファイルを別のディレクトリにコピーしたいと思います。また、上記のパターンに一致するファイル名にのみ適用したいと思います。

これを行うツールはありますか?そうでなければ、スクリプトなどを使用できるようです。

  1. 正規表現によるファイル名の一致
  2. 正規表現で日付部分を照合し、日付別に昇順にリストします。
  3. 各日付に対して正規表現で時刻を一致させ、時刻の昇順で一覧表示して各ファイルをグローバルリストに追加します。
  4. ファイルリストのクリーンアップ後のファイルのコピー

ベストアンサー1

一致するすべてのファイルが現在ディレクトリにある場合(サブディレクトリにない場合、またはサブディレクトリ名にそのファイルが含まれていない場合-)、手順1〜3を使用できます。

find -regex '.*/[0-9]+-[0-9]+-[0-9]+-NEW\.XML' | sort --field-separator=- --key=2 > filelist

ステップ4:

while IFS= read -r line; do
 cp -v $line /PATH/TO/DESTFOLDER/
done < filelist

説明する:正規表現パターンは、find説明したパターンとすべてのファイルを一致させます。sortフィールドを区別し、-最初に2番目のフィールド(日付)で並べ替え、次のフィールド(ここでは3番目のフィールド(時間))で並べ替えます。シェルで行がどのように処理されるかを説明します。ここ。各行は$line変数に保存され、ターゲットフォルダにコピーされます。オプションは現在コピーされているファイルを-v表示します。cp

おすすめ記事