Многократная команда с xargs с использованием sh -c не работает - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь запустить эту команду

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

это не работает, и ошибка выглядит так, как будто она не может выбрать значение '{}'. Когда я удаляю раздел sh -c, который помогает запустить несколько команд

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

Эта команда работает нормально. Я использую Oracle Linux 7. Может кто-нибудь сказать, что является причиной этого и есть ли другой способ запустить несколько команд.

1 Ответ

1 голос
/ 15 марта 2019

Я бы рекомендовал передать имя файла в качестве аргумента 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 вместо.

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"' _ {}
...