Directory

如何按字母順序對目錄列表進行排序並獲取在特定字元串之後排序的第一個值?

  • January 24, 2020

我有一個充滿備份文件夾的目錄,名稱格式為 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/

引用自:https://unix.stackexchange.com/questions/563821