我有一堆包含大量文件的目录。作为脚本的一部分,我想查找特定文件,如果存在,我想删除它。文件名看起来像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.0
或4.10.0
和1.2
或0.98
)
答案 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
请注意,如果您完全没有匹配,则会回显原始字符串。