我在使用 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* 开头的文件的目录,它会显示预期的结果。
因此,我想知道是否有一种方法可以在可能包含匹配项的目录中使用通配符搜索文件并将其显示为结果。
答案1
简而言之 - 是的,有办法。您只需以某种方式转义通配符即可。有多种方法可以做到这一点,我最常用的方法是转义特定的通配符:
find . -name backup\* -print
或者,简单地引用该模式:
find . -name "backup*" -print
其他方法也同样有效 - 要点是以某种方式防止 shell 将通配符视为全局表达式。