Existem comandos para extrair um nome de diretório ( dirname
) e nome de arquivo ( basename
) de um caminho. Então você poderia fazer algo como
find . -name '*.rar' -print0 | \
xargs -0 -I{} -n1 -P4 /bin/sh -c 'cd "$(dirname {})"; unrar x "$(basename {})"'
AFAIK, xargs
não suporta a mudança de diretórios, então você precisaria de algum intermediário para fazer isso, daí o /bin/sh
. Você mencionou escrever um wrapper em torno de unrar
, e é basicamente isso que está sendo feito, exceto no formulário de uma linha.