Como eu iria modificar a seguinte instrução bash para obter apenas os diretórios que correspondem exatamente genre_
(basename) e outro genre_*
. Como próximo passo, acrescentei | wc -l
ao segundo find
, mas para cada linha recebo o mesmo número muito alto, o que me diz que é uma contagem entre diretórios (por quê?)?
$ find . -name 'genre_' -exec dirname {} \; | while EFS= read -r thedir; do echo "$(find . -name 'genre_*')"; done
./The-Specials/genre_
./The-Specials/genre_rock
./ACDC/genre_Hard-Rock
./We-3/genre_
./We-3/genre_Jazz
Na saída acima, somente o ACDC deve ser filtrado.
Respostas:
Eu admito que não entendo o que seu código deve fazer (leia: a questão não está clara nesse assunto). No entanto, posso responder isso:
Você,
read -r thedir
masthedir
nunca é usado. O segundofind
é o mesmo comando toda vez, começando no.
mesmo número.Bônus: Eu não vejo o ponto de
echo "$(find …)"
. Este código cheira peixe. Provavelmente deveria ser justofind …
.fonte
$thedir
no lugar da.
segundafind
declaração. Isso resolveu:$ find . -name 'genre_' -exec dirname {} \; | while EFS= read -r thedir; do var="$(find $thedir -regex '.*genre_.*'| wc -l)"; if (( "$var" > 1 )); then rm "$thedir"/genre_; fi; done
mas agradeço qualquer sugestão para torná-lo mais conciso.