Dai*_*i42 1 shell find quoting wildcards
我在使用 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 {} \;
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
find: paths must precede expression: backup-20151219.zip
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)
那是因为它匹配了 backup* regex 并将其用作搜索模式,而不是使用它来过滤结果。我知道的。
如果我切换到另一个不包含以 backup* 开头的文件的目录,它会显示预期的结果。
所以,我想知道是否有办法在可能包含匹配项的目录中使用通配符搜索文件并将它们显示为结果。
简而言之 - 是的,有办法。您只需以某种方式转义通配符即可。有多种方法可以做到这一点,我最常用的方法是转义特定的通配符:
find . -name backup\* -print
Run Code Online (Sandbox Code Playgroud)
或者,简单地引用模式:
find . -name "backup*" -print
Run Code Online (Sandbox Code Playgroud)
其他方法也同样有效 - 重点是以某种方式防止 shell 将通配符视为 glob 表达式。
归档时间: |
|
查看次数: |
105 次 |
最近记录: |