Bash脚本,使用find运行echo命令,设置变量并使用该变量

时间:2011-11-18 13:09:25

标签: bash find command

我想运行两个命令,但第二个命令取决于第一个命令。

有没有办法做这样的事情。

 find . -name '*.txt' -exec  'y=$(echo 1); echo $y' {} \;

...

实际上,我想这样做。 运行find命令,切换到该文件所在的目录,然后在当前目录中的文件上运行该命令。

find . -name '*.txt' -exec 'cd basedir && /mycmd/' {} \;

我该怎么做?

2 个答案:

答案 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当前目录的到期时间不同到cdmycmd可能无法找到该文件。如果您希望命令接收绝对路径名,可以尝试:

find $PWD -name '*.txt' -exec bash -c 'cd $(dirname {}) && pwd && /mycmd {}' \;