サーバーには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 はまた、n
glob の結果を数値でソートする glob 修飾子を使用します (したがって、 との間ではなくfolder 10
後処理後 )。ディレクトリタイプファイルに制限されます。folder 9
folder 1
folder 2
/