Directory
如何按字母順序對目錄列表進行排序並獲取在特定字元串之後排序的第一個值?
我有一個充滿備份文件夾的目錄,名稱格式為 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/