ディレクトリ内のファイルの日付文字列に基づいてディレクトリを並べ替える

ディレクトリ内のファイルの日付文字列に基づいてディレクトリを並べ替える

このため頭が痛いですね。バックアップの作成日を含むそのディレクトリのファイルに基づいて複数のディレクトリを並べ替えようとしています。

これはバックアップを注文するためのものです。同時に別のホストにコピーされるため、ディレクトリのctimeまたはatimeを使用してこれを行うことはできません。

次のような構造があるとしましょう。

/backups/full
/backups/incremental1
/backups/incremental2
/backups/incremental3
...

これらのバックアップディレクトリには次のものがあります。

/backups/full/date.txt
/backups/incremental1/date.txt
/backups/incremental2/date.txt
..

このdate.txtファイルにはそれぞれの文字列がありますcreation_time = 2020-04-03 15:26:19

生成時間文字列に基づいてこれらのディレクトリをソートして配列に配置するスクリプトをどのように作成できますか?

array=(full incremental1 incremental2 incremental3)

for dir in @{array[@]}; do

変数や配列でソートしたいです。

ベストアンサー1

構造がdate.txt常に同じで、ディレクトリ名に改行文字が含まれていないと仮定すると、次のようにします。

for d in /backups/*/date.txt; do
    printf '%s\t%s\n' "$(grep creation_time "$d")" "$(basename "$(dirname "$d")")"
done | sort | cut -f2-

出力:

full
incremental1
incremental2
incremental3

これを配列に入れるのはとても簡単ですが、結果をループなどで供給できるので、おそらく必要ありませwhilexargs

おすすめ記事