[英]Find command in shell with regular expression to find files with two extensions
我正在嘗試列出我的應用程序服務器中生成的日志和zip文件。
我用下面的表達。 但看起來有問題。 您能協助您進行正則表達嗎?
ROOT_DIR=applications/jboss-as/servers/
find $ROOT_DIR -name '*[0-9]*[zip|log]' -mtime +5
最后我希望使用命令刪除這些文件
find $ROOT_DIR -name '*[0-9]*[zip|log]' -mtime +5 -exec rm {} \;
第一個命令將找到它們並顯示。
find $ROOT_DIR ! -readable -prune -mtime +5 -type f | egrep -e "^.*\.(log|zip)$"
第二個將全部刪除
find $ROOT_DIR ! -readable -prune -mtime +5 -type f | egrep -e "^.*\.(log|zip)$" | xargs -L 1 rm
您可以通過以下方式進行操作(使用find
大多數版本):
find "$ROOT_DIR" '(' -name '*[0-9]*.log' -o -name '*[0-9]*.zip' ')' -mtime +5 -exec rm {} +
+
來自POSIX 2008,表示“以盡可能方便的文件名運行exec'd命令”,而較早的替代項';'
(或\\;
)表示“每個文件名運行一次exec'd命令”。
如果您擁有GNU find
,則可以使用各種正則表達式的方言:
find "$ROOT_DIR" -regex '.*\.\(zip\|bz2\)' -mtime +5 -delete
這使用默認的正則表達式模式; 您可以使用一些替代方法來避免使用太多的反斜杠。 -delete
選項使用unlink()
系統調用而不是調用外部命令。 因此,它效率更高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.