如何按名称模式搜索文件并在其目录中执行命令?

如何按名称模式搜索文件并在其目录中执行命令?

以下命令应该执行的操作是搜索所有发票 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 '{}' \;

相关内容