刪除檔案名稱中帶有時間戳記的資料夾中的所有文件

刪除檔案名稱中帶有時間戳記的資料夾中的所有文件

我必須刪除檔案名稱具有fcrjlog-11-21-2019-1.txt格式的資料夾中的所有檔案。我想刪除資料夾中具有此類檔案名稱的所有檔案。

答案1

 find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete

(如果您不支援非標準擴展,請替換-delete為)。-exec rm -f {} +find-delete

?是通配符運算符,代表任何單一字符。替換為[[:digit:]]僅匹配十進制數字字元 (0123456789)。

! -type d排除類型的文件目錄-delete除非它們是空的,否則無法刪除),您可以替換為-type f更具限制性(僅包括常規的文件(所有其他類型的文件除外,包括符號連結、目錄、套接字、fifo、裝置...)。 GNUfind也支持-xtype f選擇確定為的文件常規的符號鏈結解析後。

替換fcrjlog*可匹配任意數量的字符,或?*任何非空字符序列,或[!.]*任何第一個不是的非空字符序列.(以排除隱藏文件)。

答案2

通常會顯示一些您已經嘗試過的內容 - 這樣您會得到更多回應。對於這個問題,你需要尋找正規表示式,並理解一些概念。我假設你的時間戳中的「x」是數字?如果是這樣,這個正規表示式將幫助您開始:

/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt

/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")

分解各個部分:

"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{4}  -- Exactly four numeric characters
 -         -- A literal dash "-"
 [0-9]     -- One numeric character
 .         -- Any character.  Use \. to insist on a dot
 txt       -- The literal string "txt"
 $         -- An anchor that means the txt has to be at the end of the line
"

相關內容