Bash

選擇最新文件並按名稱分組

  • February 17, 2012

我有一個包含以下名稱結構的文件的目錄。

<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

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