在运行 find 命令以查找当前目录中的所有 jpg 文件时
find . -maxdepth 1 -type f -name *.jpg
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
find: paths must precede expression: pic1 (1).jpg
Usage: find [-H] [-L] [-P] [-Olevel] [-Dhelp|tree|search|stat|rates|opt|exec] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这有什么问题。
l0b*_*0b0 10
tl;dr在 find 中总是引用 globs:(find . -maxdepth 1 -type f -name "*.jpg"
注意"
周围的字符*
)。
在您的情况下,shell 正在解释*.jpg
(注意*
字符)并尝试匹配当前目录中以.jpg
. 有一个名为的文件,pic1 (1).jpg
因此文件名替换*.jpg
. 系统由 shell 给出的命令变为
find . -maxdepth 1 -type f -name 'pic1 (1).jpg'
Run Code Online (Sandbox Code Playgroud)
要深入了解,请尝试使用 跟踪原始命令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
...
Run Code Online (Sandbox Code Playgroud)