簡體   English   中英

在Shell中使用正則表達式查找命令以查找具有兩個擴展名的文件

[英]Find command in shell with regular expression to find files with two extensions

我正在嘗試列出我的應用程序服務器中生成的日志和zip文件。

  • .log或.zip文件
  • 這些文件的名稱中包含數字。 即文件名稱中包含任意數字
  • 文件應早於+5天。

我用下面的表達。 但看起來有問題。 您能協助您進行正則表達嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM