![刪除檔案名稱中帶有時間戳記的資料夾中的所有文件](https://rvso.com/image/164724/%E5%88%AA%E9%99%A4%E6%AA%94%E6%A1%88%E5%90%8D%E7%A8%B1%E4%B8%AD%E5%B8%B6%E6%9C%89%E6%99%82%E9%96%93%E6%88%B3%E8%A8%98%E7%9A%84%E8%B3%87%E6%96%99%E5%A4%BE%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.png)
我必須刪除檔案名稱具有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
"