Wildcards

獲取目錄中與模式匹配的文件數並刪除最舊的文件

  • March 16, 2016

我想做以下事情:

  1. 獲取給定目錄中與給定模式匹配的文件數,例如:

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

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