Yyyy-MM-dd--HH:mm:ss形式の名前のバックアップフォルダーがいっぱいのディレクトリがあります
同じ形式で日付を入力した場合、その後に並べ替える最初のディレクトリを取得し、そのフォルダーを別の場所にコピーする方法はありますか?
例えばバックアップのリストが次のようになっている場合:
2019-12-04--16:12:56
2019-12-09--13:36:53
2020-01-23--13:24:13
2020-01-23--13:47:03
と入力します2020-01-05--00:00:00
、復元したい2020-01-23--13:24:13
for dir in ????-??-??--??:??:??/; do
if [[ $dir > "2020-01-05--00:00:00" ]]; then
printf '%s\n' "$dir"
# process "$dir" here
break
fi
done
上記のスクリプトは、名前がパターン????-??-??--??:??:??
に一致する現在のディレクトリ内のディレクトリをループします。
ディレクトリごとに、文字列2020-01-05--00:00:00
と比較されます。その文字列の後に辞書順にソートする場合、ディレクトリの名前が出力され、ループが終了します。
これは、パス名展開の結果であるリストが現在の照合順序に従ってソートされるため(ls
がデフォルトでリストをソートするように)、これは機能します。
そのディレクトリを別の場所にコピーするには、コメントを次のようなものに置き換えます
rsync -av "$dir" /somewhere/elsewhere
以下は、最初のコマンドライン引数から特定の文字列を取得し、同じことを行うスクリプトです。
#!/bin/bash
for dir in ????-??-??--??:??:??/; do
if [[ $dir > "$1" ]]; then
printf '%s\n' "$dir"
# process "$dir" here
break
fi
done
リストしたディレクトリを使用してこれをテストします。
$ ls -l
total 10
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2019-12-04--16:12:56
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2019-12-09--13:36:53
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2020-01-23--13:24:13
drwxr-xr-x 2 myself wheel 512 Jan 24 11:14 2020-01-23--13:47:03
-rw-r--r-- 1 myself wheel 119 Jan 24 11:23 script.sh
$ ./script.sh "2020-01-05--00:00:00"
2020-01-23--13:24:13/
思いついた
$ printf '%s\n' ????-??-??--??:??:?? | awk '$1 > "2020-01-05--00:00:00"{print;exit}'
2020-01-23--13:24:13
zsh
の場合:
_ref=2020-01-05--00:00:00
list=($ref *(DN/oN)) # list is ref + all directories unsorted
list=(${(o)list}) # sort the list (as per locale collation algorithm)
print -r -- ${list[$list[(ie)$ref] + 1]-none}
_
(ここで、$array[(ie)string]
は、i
xactly e
である要素の配列string
ndexに展開されます)。
ls|sort|grep -A 1 2020-01-20|head -n 2|tail -n 1