Bash
選擇最新文件並按名稱分組
我有一個包含以下名稱結構的文件的目錄。
<device>.<yyyy-mm-dd-hh-mm-ss>
我正在編寫一個腳本,它將為每個設備保留這些配置備份的最後 X 個副本。為了實現這一點,我需要什麼樣的選擇魔法?
我在想 BASH,但我真的與語言無關。
萬用字元按字典順序擴展文件名。由於您的日期格式與字典順序匹配,因此您的要求歸結為保留萬用字元的最後 X 個匹配項(如果少於 X,則保留所有匹配項)。我假設您的備份是匹配的文件
$device.*
,根據需要調整模式。在 zsh 中:
set -- $device.* if [[ $# -gt $X ]]; then set -- $@{[-$X,-1]}; fi cp -- $@ /retain/area/
在任何 Bourne 樣式的 shell(ash、bash、ksh、…)中:
set -- "$device".* if [ $# -gt $X ]; then shift $(($#-$X)); fi cp -- "$@" /retain/area
如果您實際上想要刪除較舊的文件,則需要對除 X 之外的第一個匹配項採取行動(如果少於 X,則不匹配)。
在 zsh 中:
files=($device.*) rm -f -- $files[1,-$X-1]
在其他外殼中:
set -- "$device".* while [ $# -gt $X ]; do rm -- "$1" shift done