Exclui arquivos ao excluir arquivos usando o find

6

Este comando não é compatível com DWIM:

find . \( -name .svn -prune -false \) -o \( -empty -delete \)
find: The -delete action atomatically turns on -depth, but -prune 
      does nothing when -depth is in effect.  If you want to 
      carry on anyway, just explicitly use the -depth option.

A adição de -depth desativa o efeito de -prune , o que significa que .svn diretórios também são excluídos. Então: Qual sintaxe find (se houver) pode ser usada para remover e excluir alguns dos caminhos não limpos, sem usar outras ferramentas como rm ?

    
por l0b0 29.08.2011 / 11:20

2 respostas

4

Você pode usar -path , não é POSIX, mas suportado por muitas implementações:

find . \! -path "*/.svn/*" -empty -delete

-regex também é uma opção.

    
por 29.08.2011 / 12:10
0

Se o espaço em branco não for um problema, algo assim funcionará

find . \( -name .svn -prune -false \) -o -print | tac | xargs -L rm -f

A vantagem dessa abordagem é que é um grande ganho de desempenho quando as partes da árvore que estamos evitando com -prune são grandes. A desvantagem é que -delete irá deletar as coisas assim que vir uma folha, mas este comando tem que esperar até que find saia. Então, se há muitas coisas para deletar, mas não muito do espaço de busca foi podado, pode não ser uma vitória.

    
por 26.05.2012 / 00:50

Tags