bash: Excluindo diretórios que não contêm determinadas strings

bash: Excluindo diretórios que não contêm determinadas strings

Como posso excluir diretórios usando o bash que não contêm diretórios chamados wav ou mp3? Eu uso o macOS Sierra.

find . -type d \! -exec test -e '{}/wav' \; -printencontra os diretórios que não contêm diretórios wav. Como posso incluir mp3 neste comando? E como posso excluir os diretórios resultantes?

Minha biblioteca de música segue esta estrutura: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>, onde o formato é wav ou mp3. Existem muitos diretórios sem nenhum arquivo de áudio, mas sim capas, por exemplo, portanto, não posso simplesmente procurar diretórios vazios para excluir aqueles diretórios que não contêm arquivos de áudio.

Responder1

Em primeiro lugar, antes de fazer isso,faça um backup dos seus arquivos.

Seriamente.


Para localizar e remover diretórios de artistas (e seu conteúdo, recursivamente) que não contêm diretórios diretamente (ouarquivos) intitulados wavou mp3(casoconfidencial), tente o seguinte:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

Só depois que você tiverconfirmou a saídacorresponde aos diretórios que você espera que sejam excluídos(e verifiquei novamente seu backup)você deve então executar:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

Responder2

Para 2 testes, execute o teste duas vezes e, se ambos falharem, faça algo:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

informação relacionada