次のパターンを持つファイルがたくさんあります。
{UID}-YYMMDD-HHMMSSMM-NEW.xml
または実際の例:
56959-140918-12465122-NEW.XML
ファイル名に含まれる日時順にこのファイルを別のディレクトリにコピーしたいと思います。また、上記のパターンに一致するファイル名にのみ適用したいと思います。
これを行うツールはありますか?そうでなければ、スクリプトなどを使用できるようです。
- 正規表現によるファイル名の一致
- 正規表現で日付部分を照合し、日付別に昇順にリストします。
- 各日付に対して正規表現で時刻を一致させ、時刻の昇順で一覧表示して各ファイルをグローバルリストに追加します。
- ファイルリストのクリーンアップ後のファイルのコピー
ベストアンサー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