Parece que você deseja excluir os arquivos que terminam em partN.rar
, em que N
é maior que 1. Com zsh
:
set -o extendedglob
for file (./**/(^*part<2->).rar(N.)) echo unrar e $file
Remova echo
quando estiver satisfeito com o que vai fazer.
Com bash
, é um pouco mais complicado:
(export LC_ALL=C; shopt -s extglob globstar nullglob
for file in ./**/!(*part*(0)@([2-9]|[1-9]+([0-9]))).rar; do
[ -f "$file" ] || continue
[ -L "$file" ] && continue
echo unrar e "$file"
done)
Ou com o GNU find
:
LC_ALL=C find . -name '*.rar' -type f -regextype egrep \
! -regex '.*part0*([2-9]|[1-9][0-9]+)\.rar' \
-exec echo unrar e {} \;
(aquele também considera arquivos rar ocultos ou arquivos rar em diretórios ocultos).
Ou você pode tentar analisar a saída de unrar l
nos arquivos para determinar quais são arquivos de volume único ou o primeiro volume de um arquivo de vários volumes.
Aqui testado com o unrar 5.61 do rarlab.com em arquivos RAR da versão 5 (e supondo que não exista nenhum arquivo com o nome $'whatever\nDetails: whatever.rar'
), com zsh
:
is_first_volume() {
unrar l "${1-$REPLY}" 2>&1 | awk '
/^Details: / {
is_rar = /RAR/
if (/volume/) volume = $NF
exit
}
END {
if (!is_rar || volume > 1) exit 1
}'
}
for file (./**/*.rar(N.+is_first_volume)) echo unrar e $file