複数のフォルダでパターンがある最新のファイルを見つけて別のサーバーに移動する必要がある

複数のフォルダでパターンがある最新のファイルを見つけて別のサーバーに移動する必要がある

サーバーには1〜10番のフォルダが複数あります。各フォルダには複数のファイルがあります。次のスキーマ名を持つ最新のファイルを見つける必要があります。

  • ファイル1:NA_UW_CLUSTER_RESULTS_210916.zip
  • ファイル2:UW_CLUSTER_RESULTS_210916.zip

「ファイル2」を選択し、1〜10の対応するフォルダが複数ある別のサーバーにコピーする必要があります。

UW_CLUSTER_RESULTS_210916.zipしたがって、サーバー「A」の「フォルダ1」から、一致するパターンを持つ最新のファイル()をサーバー「B」の「フォルダ1」にコピーする必要があります。

答え1

おそらくこれはあなたのユースケースには十分でしょう。

ls -1 -td /dir1/prefix1* /dir2/prefix2* | head -n 1

またはより強力に:

find /dir1 /dir2 -type f \( -path "*dir1/prefix1*" -o -path "*dir2/prefix2*" \) -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "

答え2

そしてzsh

set -o extendedglob

for folder ('folder '<->(n/))
  scp $folder/*CLUSTER_RESULTS_[0-9](#c6).zip(om[1]) B:$folder/

いくつかのzsh高度なglob演算子を使用します。

  • <->、これは<5-20>数値と一致する演算子ですが、これには制限がないため、すべての10進数と一致することができます。
  • [0-9]:zshの0123456789文字のみが一致します(他のシェルが通常一致する数百文字の代わりに)。
  • (#c6):拡張正規表現に似ています{6}。 :最初の6項目と一致するので、ここに数字があります(必須extendedglob)。
  • (om[1]):この部分はグローバル修飾子です。om編集時間に基づいoてソートm(最新順)し、[1]最初の項目を選択してください。フォルダ glob はまた、nglob の結果を数値でソートする glob 修飾子を使用します (したがって、 との間ではなくfolder 10後処理後 )。ディレクトリタイプファイルに制限されます。folder 9folder 1folder 2/

関連情報