Linux 使用sh-c的带有xargs的多个命令不起作用

Linux 使用sh-c的带有xargs的多个命令不起作用,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我正在尝试运行此命令 find . -name "new_impl.jar" | xargs -I '{}' sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL '{}';' 它不工作,并且错误看起来好像无法拾取'{}'的值。当我删除有助于运行multiple命令的sh-c部分时 find . -name "new_impl.jar" | xargs -I '{}' java -jar jd-cli.jar --skipResource

我正在尝试运行此命令

find . -name "new_impl.jar" | xargs -I '{}' sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL '{}';' 
它不工作,并且错误看起来好像无法拾取
'{}'
的值。当我删除有助于运行multiple命令的
sh-c部分时

find . -name "new_impl.jar" | xargs -I '{}' java -jar jd-cli.jar --skipResources -n -g ALL '{}';'

这个命令运行良好。我正在使用Oracle Linux 7。有人能告诉我这背后的原因是什么,还有没有其他方法可以运行多个命令。

我建议将文件名作为参数传递给
sh

find . -name "new_impl.jar" | 
  xargs -I '{}' \
    sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL "$1";rm "$1";mv *.jar "$1";unzip "$1" -d "$1".bk/;rm "$1"' _ {}
注意:这也适用于从
查找
使用
-exec

find -name "new_impl.jar" \
   -exec sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL "$1";rm "$1";mv *.jar "$1";unzip "$1" -d "$1".bk/;rm "$1"' _ {}

为什么要使用
xargs
?只需使用
查找-execjava-jarjd-cli.jar--skipResources-n-gall{}。这实际上是我的命令的较短版本,在此之后我还有3-4个命令要运行,我在这里没有显示。如果只有命令可以运行,我会遵循你的命令。这是我的完整命令查找-名称为“new_impl.jar”| xargs-I'{}'sh-c'java-jarjd-cli.jar--skipResources-n-gall'{}';rm'{}';mv*.jar'{}';解压'{}'-d'{}'.bk/;rm“{}”您的第二个命令肯定不能正常工作,因为它有未关闭的引号。请发布
find的输出-命名为“new_impl.jar”| xargs-I'{}'sh-c'printf'{%s}\n”“$@'{/code>,以及使用
java-jar jd-cli.jar--skipsources-n-gall
命令替换其中的
printf{%s}\n
时所得到的确切错误。请注意,
xargs
将替换
-I
的参数,甚至在引号内;那
“…{};”
是毫无意义的,会破坏您的脚本。错误是jd-cli.jar需要一个无法获取的输入,并且它会立即将我从远程连接注销。我认为这个sh-c会在Linux环境中以某种方式阻止我,因为我的相同命令在MacOS上运行良好