Excluir diretórios que contenham um determinado arquivo

5

Eu quero encontrar todos os diretórios que contenham um determinado arquivo e, em seguida, exclua esses diretórios. Com

find . -name thatcertainfile -execdir pwd \;

Eu recebo uma lista de todos os diretórios que eu quero deletar, mas como eu posso deletar todos os diretórios na hora? Note que eu quero deletar todo o diretório e não apenas o arquivo em si, onde eu poderia usar

find . -name thatcertainfile -exec rm -r {} \;

    
por snurden 28.04.2016 / 12:24

3 respostas

2

Experimente este comando:

rm -rf $(find . -name thatcertainfile -execdir pwd \;)

Ele deve dizer ao rm -rf que o que ele teve que remover é a saída do seu comando. Por exemplo, se a saída do seu comando foi /home/guest/Documents , o comando que mostrei seria traduzido em rm -rf /home/guest/Documents .

    
por 28.04.2016 / 12:30
2

Dado um caminho para o arquivo ./some/where/thatcertainfile , retirando a% final/thatcertainfile, você tem um caminho para o diretório. Inicie um shell para poder usar a manipulação de strings no caminho.

find . -name thatcertainfile -exec sh -c 'rm -r "${0%/*}"' {} \;

Como alternativa, use zsh. Para transformar um caminho no nome do diretório que o contém, use o modificador de histórico :h um qualificador glob .

rm -rf **/thatcertainfile(N:h)

(Obviamente, teste isso primeiro antes de executá-lo com rm !)

    
por 29.04.2016 / 00:59
0

Esse canal deve fazer o trabalho e estar seguro de diretórios com espaços em seus nomes.

find . -name thatcertainfile -print0 | xargs --null dirname -z | xargs --null rm -r

Se alguém vir um problema com isso, eu gostaria de saber.

    
por 26.01.2017 / 16:32