使用通配符在 Linux 機器上尋找(並刪除)匹配的文件

使用通配符在 Linux 機器上尋找(並刪除)匹配的文件

我想為盒子上的每個用戶刪除 Awstats 的特定設定檔。刪除它們的最佳方法是什麼?

所有文件都位於/home以下結構:

/home/{username1}/domains/{domain1}/public_html/awstats/.data/awstats.{domain1}.conf
/home/{username1}/domains/{domain2}/public_html/awstats/.data/awstats.{domain2}.conf

/home/{username2}/domains/{domain1}/public_html/awstats/.data/awstats.{domain1}.conf

某些/home/{username}/domains/資料夾具有多個網域子資料夾。

答案1

你有沒有嘗試過

rm /home/*/domains/*/public_html/awstats/.data/awstats.*.conf

警告:如果有一個檔案的名稱類似

/home/phred/domains/sci-fi/public_html/awstats/.data/awstats.fantasy.conf

即,兩次出現{domain1}不匹配,那麼上面的指令也會將其刪除。那是問題嗎?

PS 除非驗證配對的兩次出現{domain1}是您所問的問題,或者我還缺少其他內容,否則這個問題與正規表示式(regex)無關。當*?[(帶有匹配的])在 shell 命令列上使用時,它們被稱為通配符

答案2

/home運行以下命令

find . -name 'awstats*conf' | xargs rm

在透過管道傳輸結果以自行運行之前,xargsfind . -name 'awstas*.conf驗證它是否僅列出您要刪除的檔案。xargs rm僅在確認後才透過管道傳輸。

如上find所示使用時將遞歸尋找與指定的正規表示式相符的檔案。有關更多信息,請查看 find 和 xargs 的手冊頁。

相關內容