我想运行两个命令,但第二个命令取决于第一个命令。
有没有办法做这样的事情。
find . -name '*.txt' -exec 'y=$(echo 1); echo $y' {} \;
...
实际上,我想这样做。 运行find命令,切换到该文件所在的目录,然后在当前目录中的文件上运行该命令。
find . -name '*.txt' -exec 'cd basedir && /mycmd/' {} \;
我该怎么做?
答案 0 :(得分:3)
find实际上有一个主服务器切换到每个文件的目录并从那里执行命令:
find . -name '*.txt' -execdir /mycmd {} \;
答案 1 :(得分:1)
Find -exec
选项需要一个带参数的可执行文件,而不是一个命令,但你可以使用bash -c cmd
来运行这样的任意shell命令:
find . -name '*.txt' -exec bash -c 'cd $(dirname {}) && pwd && /mycmd $(basename {})' \;
我添加了pwd
以确认mycmd
在正确的目录中执行。你可以删除它。 dirname
为您提供每个文件的目录,basename
为您提供文件名。如果省略basename
,您的命令将收到(作为{}
)相对于您运行find
的目录的每个文件的路径名,这与mycmd
当前目录的到期时间不同到cd
,mycmd
可能无法找到该文件。如果您希望命令接收绝对路径名,可以尝试:
find $PWD -name '*.txt' -exec bash -c 'cd $(dirname {}) && pwd && /mycmd {}' \;