Использование `sem` для параллельного выполнения скрипта

У меня есть следующий сценарий оболочки (один лайнер), который я хотел использовать для идентификации каталогов, имеющих то же самое содержимое. Я использую его, чтобы идентифицировать и удалить повторяющиеся (дочерние) каталоги.

Когда я пытаюсь запустить тот же скрипт с sem , я сталкиваюсь с No such file or directory ошибками No such file or directory .

Пример – нет параллельных потоков

 find -type d -links 2 | while read i; do \ find "$i" -type f -print0 | xargs -r0 md5sum | awk '{ print $1 }' \ | sort | md5sum | xargs -I {} echo {} $i ; \ done 

Дает мне:

 e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007 2 e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007 

Пример – с использованием sem

 find -type d -links 2 | while read i; do sem -j+0 \ find "$i" -type f -print0 | xargs -r0 md5sum | awk '{ print $1 }' \ | sort | md5sum | xargs -I {} echo {} $i ; \ done; sem --wait 

Дает мне:

 find: `./Daft': No such file or directory find: `Punk/Alive': No such file or directory find: `2007': No such file or directory find: `2': No such file or directory d41d8cd98f00b204e9800998ecf8427e - ./Daft Punk/Alive 2007 2 find: `./Daft': No such file or directory find: `Punk/Alive': No such file or directory find: `2007': No such file or directory d41d8cd98f00b204e9800998ecf8427e - ./Daft Punk/Alive 2007 

Вопросов:

  1. Почему разница в поведении?
  2. Как удалить / исправить No such file or directory из sem ?
  3. Есть ли какие-либо другие улучшения, которые я мог бы сделать в сценарии? (есть много awk и xargs )

2 Solutions collect form web for “Использование `sem` для параллельного выполнения скрипта”

Самое простое решение – процитировать команду, переданную в sem:

 sem -j+0 "find \"$i\" -type f -print0" 

Вы можете видеть разницу в этом примере

 $ sem -j 8 echo "aa" aa $ sem -j 8 'echo "aa"' aa 

Вместо этого используйте параллель:

 doit() { i="$1" find "$i" -type f -print0 | xargs -r0 cat | md5sum | awk '{ print $1 }' | sort | md5sum } export -f doit find -type d -links 2 | parallel --tag doit 
  • openssl-1.0.1e компиляция на Debian
  • emacs fonts из ssh не так хорош, как локально установлен
  • Что такое SSH_TTY и SSH_CONNECTION?
  • Список сохраненных отпечатков пальцев ssh
  • Нельзя подписывать / шифровать, если я не запускаю gpg-agent вручную
  • Обратный SSH-туннель
  • Как удалить GNOME для запуска только Compiz
  • Обход Ubuntu
  • Установка Linux с USB на Mac
  • Как загружать ядро ​​EFI с помощью QEMU (kvm)?
  • Почему bash появляется быстрее в VM Ubuntu, чем на главном MacOS?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.