このため頭が痛いですね。バックアップの作成日を含むそのディレクトリのファイルに基づいて複数のディレクトリを並べ替えようとしています。
これはバックアップを注文するためのものです。同時に別のホストにコピーされるため、ディレクトリの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
これを配列に入れるのはとても簡単ですが、結果をループなどで供給できるので、おそらく必要ありませwhile
んxargs
。