繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM