ファイル名に指定されたシリアル番号に基づいて最新のファイルを選択します。

ファイル名に指定されたシリアル番号に基づいて最新のファイルを選択します。

私のディレクトリにはいくつかのファイルしかなく、処理する最も古いファイルを選択する必要があります。

Expの場合:/ tmpディレクトリに次のファイルがあります。

Sample_0000237826-001_xyz.dat
Sample_0000437564-001_xyz.dat
Sample_0000237826-002_xyz.dat
Sample_0000137294-003_xyz.dat

したがって、私のスクリプトは最初にファイル名の最初の10桁のセットに基づいてファイルをソートする必要があります。オコココック、最初の10桁の数字セットに複数の項目がある場合は、次の3桁の数字セットを並べ替える必要があります。、最も古いものを選択する必要があります。

処理するファイルを選択したら、そのファイルをディレクトリから削除します。したがって、次回実行すると表示されません。

したがって、最初の実行では、Sample_0000137294-003_xyz.datファイルを選択する必要があります。

2番目の実行では、Sample_0000237826-001_xyz.datを選択する必要があります。

3番目の実行では、Sample_0000237826-002_xyz.datを選択する必要があります。

など。

誰もが忘れたことの1つは、上記のように、このファイルがリモートサーバーから自分のローカルサーバーに1つずつコピーされることです。だから私はコピーに "rsync"を使用します。したがって、以下の解決策がrsyncコマンドでも機能するかどうかを教えてください。

ベストアンサー1

そしてzsh

extract_numbers() REPLY=${(SM)REPLY##<->-<->}
for file (*<->-<->*.dat(no+extract_numbers)) {
  do-what-you-will-with $file
}

一致するファイル名(正の10進数と一致)のubstringをextract_numbers返すソート関数()を定義します。SM<->-<-><->

この関数を使用してグローバルをn数値でoソートします*<->.<->*.dat

おすすめ記事