次のように構成されたファイルセットがあります。
regions
├── ap-northeast-1
│ └── sg-66497903
│ ├── sg-66497903-2017-10-03-Tue-12.39.json
│ ├── sg-66497903-2017-10-03-Tue-12.42.json
│ ├── sg-66497903-2017-10-03-Tue-12.49.json
│ ├── sg-66497903-2017-10-03-Tue-12.53.json
│ └── sg-66497903-2017-10-03-Tue-13.12.json
├── ap-northeast-2
│ └── sg-824282eb
│ ├── sg-824282eb-2017-10-03-Tue-12.39.json
│ ├── sg-824282eb-2017-10-03-Tue-12.42.json
│ ├── sg-824282eb-2017-10-03-Tue-12.49.json
│ ├── sg-824282eb-2017-10-03-Tue-12.53.json
│ └── sg-824282eb-2017-10-03-Tue-13.12.json
├── ap-south-1
│ └── sg-4fec0526
│ ├── sg-4fec0526-2017-10-03-Tue-12.39.json
│ ├── sg-4fec0526-2017-10-03-Tue-12.42.json
│ ├── sg-4fec0526-2017-10-03-Tue-12.49.json
│ ├── sg-4fec0526-2017-10-03-Tue-12.53.json
│ └── sg-4fec0526-2017-10-03-Tue-13.12.json
リストは長いですが、アイデアを得ることができます。さまざまなディレクトリの他のファイルと一緒に配列に設定する基準として使用するために、各ディレクトリで最も古いjsonファイルを見つけようとしますdiff
。
これまでこれを得ましたが、正しくありません。
#!/bin/bash
mapfile -t awsReg < <(ls ~/regions)
for awsrg in "${awsReg[@]}"
do
mapfile -t awsSG < <(ls regions/"$awsrg")
for sg in "${awsSG[@]}"
do
find "$sg" -mindepth 2 -type f -printf '%T+ %p\n' | sort | head -n 1
diff -q ##oldest file## ##all other files###
done
done
regions -> ap-northeast-1 -> sg-66497903
たとえば、ファイルを探したいと思いますsg-66497903-2017-10-03-Tue-12.39.json
。次のdiff
ディレクトリdiff -q
に移動し、そのディレクトリの中で最も古いディレクトリを見つけます。
ベストアンサー1
以下を使用するとはるかに簡単ですzsh
。
for sg in ~/region/ap-*/sg-*(/); do
files=($sg/sg-*.json(N.Om)) # list of json regular files sorted
# from oldest to newest
if (($#files >= 2)); then
oldest=$files[1]
files[1]=()
for file in $files; do
cmp -s $oldest $file ||
printf '"%s" differs from "%s"\n' $file $oldest
done
fi
done
ksh93
ORbash
とGNUを使用すると、ls
次のように変換できます。
for sg in ~/region/ap-*/sg-*/; do
eval "files=($(ls --quoting-style=shell-always -rtd -- "$sg"sg-*.json))"
if ((${#files[@]} >= 2)); then
oldest=${files[1]}
files=("${files[@]:1}")
for file in "${files[@]}"; do
cmp -s "$oldest" "$file" ||
printf '"%s" differs from "%s"\n' "$file" "$oldest"
done
fi
done