尝试在当前目录中查找所有 jpg 文件时出现“路径必须在表达式之前”错误

Bun*_*bit 3 find

在运行 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)

  • strace 是一个很棒的工具,但对于不了解 shell 扩展的人来说绝对是一种矫枉过正。退回 shell 历史记录并在命令前加上“echo”要简单得多。 (3认同)