2017-04-12 221 views
0

我有一個包含大量文件的目錄。作爲腳本的一部分,我想查找特定的文件,如果存在,我想刪除它。文件名看起來像這樣file-4.7.0-name-1.2-client.jar。我嘗試使用find /usr/lib/dir/ -name 'file-*-name-*-client.jar'。這裏列出了我要找但該文件還列出了文件名格式爲非常接近我要尋找的那些:Bash搜索目錄中的文件

file-4.7.0-name-1.2-client.jar 
file-4.7.0-name-1.2-thin-client.jar 

什麼會只得到file-4.7.0-name-1.2-client.jar的最佳途徑。我不能硬編碼的文件名作爲版本號可以改變(從4.7.04.10.01.20.98

+0

使用帶'regexp'標誌的'locate'。有關詳細信息,請參閱「man locate」。 –

回答

2

您可以使用正則表達式與find-delete消除匹配的文件:

find /usr/lib/dir/ -regextype posix-egrep -regex '\./file-[0-9\.]+-name-[0-9\.]+-client.jar' -delete 

沒有delete

$ ls -1 
file-4.7.0-name-1.2-client.jar 
file-4.7.0-name-1.2-thin-client.jar 
$ find . -regextype posix-egrep -regex '\./file-[0-9\.]+-name-[0-9\.]+-client.jar' 
./file-4.7.0-name-1.2-client.jar 
0

只要您有,Bash就能完成模式匹配打開了,我認爲這是默認情況。有關模式匹配的RTFM和shopt。例如:

$ touch touch file-4.7.0-name-1.2-client.jar \ 
    file-4.7.0-name-1.2-thin-client.jar`enter code here` 
$ echo echo file-*([0-9.])-name-*([0-9.])-client.jar 

僅匹配的第一個名字:

file-4.7.0-name-1.2-client.jar 

被警告說,如果你沒有比賽在所有的,這會呼應你的原始字符串。