2011-11-18 105 views
2

我想运行两个命令,但第二个命令依赖于第一个命令。Bash脚本,使用find运行echo命令,设置变量并使用该变量

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

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

...

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

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

我该怎么做?

回答

1

查找的-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 {}' \; 
3

发现实际上已经切换到每个文件的目录,并从那里执行命令主:

find . -name '*.txt' -execdir /mycmd {} \;