Excluir diretórios que contêm arquivo especificado no Mac OS X

0

Como excluo uma pasta que contém um arquivo ou pasta com um nome específico?

Por exemplo Desejo excluir todas as pastas que contêm o arquivo "things.txt":

/dirA/
/dirB/things.txt
/dirC/
/dirD/things.txt
/dirE/things.txt
/dirF/

Em seguida, ele excluiria dirB, dirD e dirE - não apenas os arquivos internos.

Obrigado!

    
por MynockSpit 31.07.2014 / 06:09

2 respostas

1

Uma solução sem canalizar em outro lugar seria passar o nome do diretório para um subshell na função find exec .

Isso não será tão eficiente e, claro, tentará remover diretórios que não existem se já tiverem sido excluídos.

find . -depth -type f -name 'things.txt' -exec sh -c 'rm -rf "$(dirname $0)"' {} \;

Se você quiser usar xargs , pode fazê-lo de maneira muito simples. Note que dirname leva apenas um argumento, então você tem que especificar -n 1 para ter xargs apenas passar um:

find . -depth -type f -name 'things.txt' | xargs -n 1 dirname | uniq | xargs rm -rf

Isso não será seguro se o nome do seu diretório contiver uma nova linha, então esteja ciente disso.

    
por 31.07.2014 / 10:30
0

Isso foi testado no Linux, pois esses comandos abaixo também são executáveis no sistema Unix.

find -type f -name 'things.txt' | xargs dirname | xargs rm -r

Explicação:

find -type f -name 'things.txt' - > procure pelo arquivo chamado 'things.txt' (somente arquivo, não diretório)

| - > canalizando o resultado para o próximo comando

xargs dirname | - > pegando o nome do diretório em que o arquivo está localizado e, em seguida, canaliza o resultado para o próximo comando

xargs rm -r - > proceder para remover todos esses diretórios que tem o arquivo pelo nome de 'things.txt'

Voila!

    
por 31.07.2014 / 09:17