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
答え1
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/
答え2
私はそれを知っています
$ printf '%s\n' ????-??-??--??:??:?? | awk '$1 > "2020-01-05--00:00:00"{print;exit}'
2020-01-23--13:24:13
答え3
そして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]
xactly要素の配列インデックスに拡張)i
e
string
答え4
あなたは試すことができます
~$ ls -r | head -n 1