运行 find 命令查找当前目录中的所有 jpg 文件,如下所示
find . -maxdepth 1 -type f -name *.jpg
我收到以下错误:
find: paths must precede expression: pic1 (1).jpg
Usage: find [-H] [-L] [-P] [-Olevel] [-Dhelp|tree|search|stat|rates|opt|exec] [path...] [expression]
我不知道那到底是什么问题。
答案1
总结总是在 find: 中引用通配符find . -maxdepth 1 -type f -name "*.jpg"
(注意"
周围的字符*
)。
在你的情况下,shell 正在解释*.jpg
(注意字符*
)并尝试匹配当前目录中以 结尾的文件名.jpg
。有一个名为的文件pic1 (1).jpg
,因此该文件名替换*.jpg
。shell 向系统发出的命令变为
find . -maxdepth 1 -type f -name 'pic1 (1).jpg'
要深入了解,请尝试使用 跟踪原始命令strace
。实际执行的是:
touch foo.jpg bar.jpg
strace find . -maxdepth 1 -type f -name *.jpg 2>&1 | grep jpg
execve("/usr/bin/find", ["find", ".", "-maxdepth", "1", "-type", "f", "-name", "bar.jpg", "foo.jpg"], [/* 62 vars */]) = 0
...