![](/img/trans.png)
[英]In a Bash script, how to use a variable to set multiple command options?
[英]Bash script, run echo command with find, set a variable and use that variable
我想运行两个命令,但是第二个命令取决于第一个。
有没有办法做这样的事情。
find . -name '*.txt' -exec 'y=$(echo 1); echo $y' {} \;
...
实际上,我想这样做。 运行find命令,切换到文件所在的目录,然后在当前目录中的文件上运行该命令。
find . -name '*.txt' -exec 'cd basedir && /mycmd/' {} \;
我怎么做?
find实际上有一个主目录,可以切换到每个文件的目录并从那里执行命令:
find . -name '*.txt' -execdir /mycmd {} \;
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 {}' \;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.