Bash搜索目录中的文件

时间:2017-04-12 17:57:08

标签: bash

我有一堆包含大量文件的目录。作为脚本的一部分,我想查找特定文件,如果存在,我想删除它。文件名看起来像file-4.7.0-name-1.2-client.jar。我尝试使用find /usr/lib/dir/ -name 'file-*-name-*-client.jar'。这列出了我要查找的文件,但它也列出了文件名,其格式非常接近我要查找的文件:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Bash完全能够进行模式匹配,只要你打开extglob,我认为这是默认情况。关于模式匹配和shopt的RTFM。例如:

$ 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

请注意,如果您完全没有匹配,则会回显原始字符串。