цикл xargs с входной переменной для использования в мультикоманде

Это должно помочь Вам:

find . -iname '*.pdf' -exec bash -c '[[ -f $(echo $(echo {}|sed "s/pdf/jpg/")) ]] || echo $(echo {}|sed "s/pdf/jpg/") not found' \;

Будут отражены файлы PDF, которые не имеют соответствующих файлов JPG.

5
25.12.2013, 02:06
2 ответа

Вам не нужно также cat или xargs для этого: простое read в цикле был бы достаточен:

while read -r IP;do
    ssh me@$IP echo "text" > file
    reboot
done < ips.txt

Для дальнейшего использования, для чего Вы хотите xargs может быть достигнут с -I опция: Вы предоставляете имя после -I и любые экземпляры того имени в самой команде будут заменены аргументами xargs получает на канале:

... | xargs -L 1 -I myip ssh me@myip 'echo "text">file;reboot'
9
27.01.2020, 20:35
  • 1
    Спасибо! я использовал -I ранее, который на самом деле перезагружал мой сервер по ошибке по некоторым причинам :) спасибо, это очень полезно! –  d-_-b 25.12.2013, 00:55
  • 2
    @d-_-b, который Это вызвано тем, что оболочка (законно) интерпретирует точку с запятой как завершение xargs команда. Для предотвращения этого заключите аргументы в кавычки: ... shh me@myip 'echo text > file;reboot' –  Joseph R. 25.12.2013, 01:05

С Параллелью GNU можно сделать это параллельно:

parallel --slf ips.txt --nonall 'echo "text" > file; reboot;'
1
27.01.2020, 20:35

Теги

Похожие вопросы