![如何按名称模式搜索文件并在其目录中执行命令?](https://linux22.com/image/127707/%E5%A6%82%E4%BD%95%E6%8C%89%E5%90%8D%E7%A7%B0%E6%A8%A1%E5%BC%8F%E6%90%9C%E7%B4%A2%E6%96%87%E4%BB%B6%E5%B9%B6%E5%9C%A8%E5%85%B6%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
以下命令应该执行的操作是搜索所有发票 pdf 文件并检查同一目录中是否存在缩略图文件。如果没有,它应该打印目录。稍后我将添加一个创建缩略图的命令。
find . -maxdepth 2 -type f -name "invoice_*.pdf" -exec sh -c '[ -f "$(dirname {})/thumbnail.jpeg" ] || echo {}' ';'
该命令正在运行,但除了文件路径之外,我还看到以下内容
sh: 1: Syntax error: "(" unexpected (expecting ")")
我猜文件路径被解释为命令。
答案1
(
您的文件名之一中有 a并且没有引用。
尝试:
find . -mindepth 3 -maxdepth 3 -type f -exec sh -c '[ -f "$(dirname '"'{}'"')/thumbnail.jpeg" ] || echo "{}"' \;
进行的引用是将双引号传递给 dirname 命令,以防文件名中'"'{}'"'
存在 a 。(
该'[ -f .. ]'
命令也需要双引号,echo 命令也需要引号!
调用脚本并将路径作为参数传递给它可能更容易find
,因此您不必考虑多层引用和替换。例如(未测试):
$ cat script
#!/bin/bash --
dir=$(dirname "${1}")
[ -f "${dir}/thumbnail.jpeg" ] || echo "${1}"
$ find . -mindepth 3 -maxdepth 3 -type f -exec ./script '{}' \;