如何抑制「查找」指令中的某些錯誤訊息?

如何抑制「查找」指令中的某些錯誤訊息?

find /var/log/myfile.*.txt -type f

如果不存在與該模式匹配的文件,我會收到類似No such file or directory.

問題:如何才能防止此錯誤訊息出現?我當然可以2>/dev/null在末尾添加一個,但這會抑制任何錯誤。我怎麼能忽略提到的那個呢?

因為我有一個定期刪除一些文件的 cronjob,並且如果不存在文件則總是記錄錯誤:

@daily find /var/log/myfile.*.txt -mtime +7 -delete

答案1

在這種情況下,正確的做法是根本不觸發此訊息。

當你在 shell 中運行它時

find /var/log/myfile.*.txt -type f

/var/log/myfile.*.txt被殼膨脹;如果沒有匹配,則find取得擴充對像或文字。/var/log/myfile.*.txt後一種情況會觸發No such file or directory

您可以先建立一個虛擬檔案:(touch '/var/log/myfile.dummy_name.txt'比較開羅的大象)。但這個「解決方案」並不是很優雅。

更好的解決方案是處理find模式:

find /var/log/ -type f -name "myfile.*.txt"

其中雙引號防止 shell 中的通配符(比較)。在這種情況下*由其自身處理,find因為-name支援此類模式。

然而上述方法可以myfile.*.txt匹配任何子目錄/var/log/也是如此。如果您find支持-maxdepth,請使用它:

find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"

如果沒有,請看這個:將 POSIX 查找限製到特定深度?


您的作業系統可能已經用於logrotate(8)管理日誌檔案。

在我的 Debian 中logrotate每天都會運行,因為/etc/cron.daily/logrotate; Ubuntu 中應該是類似的。我可以/etc/logrotate.d/透過這種方式建立自訂配置並管理任意日誌檔案。考慮這種方法。

相關內容