Wildcards
獲取目錄中與模式匹配的文件數並刪除最舊的文件
我想做以下事情:
- 獲取給定目錄中與給定模式匹配的文件數,例如:
ExtractBackup_{date}.tar.gz
2. 如果該數字為 2 或更高,則刪除與該模式匹配的最舊文件。如何使用 Korn Shell (
.ksh
) 腳本執行此操作?
沒有直接的方法來計算與模式匹配的文件,但您可以通過兩個簡單的步驟來完成:生成文件列表,並獲取列表的長度。假設日期是 YYYYMMDD 形式(請注意,這會破壞位置參數):
set ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz if [ -e "$1" ]; then count=$#; else count=0; fi
在 ksh93 中,如果沒有文件匹配,您可以通過使列表為空來簡化計數。可移植地,不匹配任何文件的模式被替換為包含一個單詞的列表,該單詞就是模式本身;ksh93 有一個結構,可以將模式擴展到一個空列表。Ksh 有數組,這意味著您不需要破壞位置參數。
backups=(~(N:ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz)) count=${#backups[@]}
如果日期是 YYYYMMDD 格式,那麼最舊的文件是列表中的第一個。
set ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz if [ $# -ge 2 ]; then rm "$1"; fi