A solução mais simples é citar o comando passado para sem:
sem -j+0 "find \"$i\" -type f -print0"
Você pode ver a diferença neste exemplo
$ sem -j 8 echo "a a"
a a
$ sem -j 8 'echo "a a"'
a a
Eu tenho o seguinte shell script (um liner), que eu queria usar para identificar diretórios que possuem exatamente o mesmo conteúdo. Estou usando, para identificar e remover diretórios duplicados (filhos).
Quando tento executar o mesmo script com sem
, encontro No such file or directory
erros.
Exemplo - sem threads paralelas
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
Me dá:
e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007 2
e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007
Exemplo - usando 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
Me dá:
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
No such file or directory
do script sem
? awk
e xargs
) A solução mais simples é citar o comando passado para sem:
sem -j+0 "find \"$i\" -type f -print0"
Você pode ver a diferença neste exemplo
$ sem -j 8 echo "a a"
a a
$ sem -j 8 'echo "a a"'
a a
Use paralelo em vez disso:
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
Tags ubuntu parallelism semaphore