Shell

查找命令匹配問題

  • April 18, 2019

我在使用 find 命令搜尋文件及其處理搜尋的方式時遇到了一些麻煩。

假設我目前位於 /tmp 目錄中,該目錄包含以下文件:backup-20151219.zip、backup-20151220.zip、backup-20151221.zip。

然後我的搜尋命令是:

[root@server tmp]# find /tmp -type f -mtime +2 -name backup* -exec rm -f {} \;

我得到以下資訊:

find: paths must precede expression: backup-20151219.zip
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

那是因為它匹配了 backup* 正則表達式並將其用作搜尋模式,而不是使用它來過濾結果。我知道的。

如果我切換到另一個不包含以 backup* 開頭的文件的目錄,它會顯示預期的結果。

所以,我想知道是否有一種方法可以在可能包含匹配項的目錄中使用萬用字元搜尋文件並將它們顯示為結果。

簡而言之 - 是的,有辦法。您只需以某種方式轉義萬用字元。有多種方法可以做到這一點,我最常用的方法是轉義特定的萬用字元:

find . -name backup\* -print

或者,簡單地引用模式:

find . -name "backup*" -print

其他方法也可以工作 - 主要的一點是要以某種方式防止 shell 將萬用字元視為 glob 表達式。

引用自:https://unix.stackexchange.com/questions/250724