Linux
按此目錄內文件的日期字元串排序目錄
我為此頭疼。我正在嘗試通過此目錄中包含備份創建日期的文件來訂購多個目錄。
這是為了訂購我的備份,我不能使用目錄的 ctime 或 atime 執行此操作,因為它們同時被複製到其他主機。
假設我有下一個結構:
/backups/full /backups/incremental1 /backups/incremental2 /backups/incremental3 ...
在這些備份目錄中,我們有:
/backups/full/date.txt /backups/incremental1/date.txt /backups/incremental2/date.txt ..
在該
date.txt
文件中,我們有一個字元串:creation_time = 2020-04-03 15:26:19
for each one。我如何製作一個腳本來通過它們的 creation_time 字元串對這些目錄進行排序並將它們放在一個數組中,這樣我就可以做一個
array=(full incremental1 incremental2 incremental3)
for dir in @{array[@]}; do
我想讓它們在變數或數組中排序
假設結構
date.txt
總是相同並且目錄名稱不包含換行符,這樣的事情應該可以解決問題:for d in /backups/*/date.txt; do printf '%s\t%s\n' "$(grep creation_time "$d")" "$(basename "$(dirname "$d")")" done | sort | cut -f2-
輸出:
full incremental1 incremental2 incremental3
如何將其放入數組中應該相當容易,但您可能不需要它,因為您可以將結果輸入例如
while
循環xargs
等。
使用shell中
date.txt
文件的最後修改時間戳:zsh
for backupdir in /backup/*/date.txt(ome['REPLY=$REPLY:h']); do # do whatever you need to do # with the directory path in $backupdir done
這使用 globbing 模式來匹配所有
date.txt
文件。模式末尾的 globbing 限定符對匹配項進行排序,以便最近修改的匹配項排在第一位(這就是這樣做的),並從匹配的路徑名om
中刪除字元串(就像會做的那樣)。/date.txt``dirname
這顯然是假設
date.txt
在將日期寫入文件時(大約在進行備份的同時)更新了文件。如果您使用複制數據,則會保留此時間戳(以及目錄時間戳)rsync --archive
。來自
bash
:zsh -c ' for backupdir in /backup/*/date.txt(ome['\''REPLY=$REPLY:h'\'']); do # do whatever you need to do # with the directory path in $backupdir done'