Variante para Bash:
#!/bin/bash
if [ ! -d "${1}" ]; then
printf '%s: error: mandatory argument is not a valid directory.' "${0##*/}" 1>&2
exit 1
fi
shopt -s extglob
for i in "${1}"/**/*.rar; do
cd -- "${i%/*}"
file=${i##*/}
unrar e -- "${file}" && rm -- @(${file}|${file%.rar}.r[[:digit:]][[:digit:]])
cd - >/dev/null
done
Os arquivos RAR também podem ser "legalmente" nomeados, por ex. myarchive.part001.rar
e assim por diante, e isso teria que ser tratado separadamente de alguma forma se esses tipos de arquivos existirem. Uma maneira pragmática de resolver isso é substituir
unrar e -- "${file}" && rm -- @(${file}|${file%.rar}.r[[:digit:]][[:digit:]])
com
unrar e -o- -- "${file}"
if [ $? -eq 0 -o $? -eq 10 ]; then
rm -- @(${file}|${file%.rar}.r[[:digit:]][[:digit:]])
fi
mas tenha cuidado, pois isso limpará os arquivos RAR mesmo se o código de erro 10 ("Nenhum arquivo para extrair") for fornecido e, portanto, não for geralmente recomendado em sua forma não modificada.
Em suma, pode ser melhor simplesmente ter o material armazenado na forma arquivada e, em vez disso, usar a descompactação dinâmica ou algo semelhante quando você quiser usá-lo. Pode haver outros benefícios em manter o formato arquivado.