Como faço para “encontrar” excluir a pasta em que ele pesquisa?

9

Estou executando o seguinte comando:

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

Gostaria de excluir todas as pastas na pasta processing (a pasta de processamento nunca deve ser excluída).

O comando também está excluindo a pasta processing . Como faço para limitar o script para excluir somente as pastas sob essa pasta?

    
por Elad Dotan 02.05.2013 / 09:10

3 respostas

22

A maneira mais fácil seria simplesmente adicionar -mindepth 1 , que ignore o primeiro hierarquia de profundidade e, assim, deixar de fora o seu diretório pai.

Além disso, você não precisa de uma chamada -exec extra para rm , você pode apenas delete das pastas diretamente se estiverem vazias.

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

Se eles não estiverem vazios:

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

Se você é preguiçoso, também pode ter um curinga expandido. Como * não inclui o diretório atual por padrão ( a menos que dotglob seja definido ), você também pode fazer:

find /var/www/html/content/processing/* -type d -mtime +1 -delete

No entanto, isso também não inclui pastas ocultas, novamente devido à opção dotglob .

    
por 02.05.2013 / 09:26
4

O problema é que find retorna o diretório atual (.) junto com os outros diretórios, portanto, ele exclui a pasta de processamento e os subdiretórios. Uma maneira rápida de contornar isso seria acrescentar a opção

-not -name .

que pára de encontrar a saída do diretório atual e, por sua vez, impede que ele seja excluído.

Isso funcionaria se você estivesse executando o comando no diretório de processamento, para permitir o fato de estar usando um caminho absoluto:

-not -name /var/www/html/content/processing

E todo o comando seria:

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;
    
por 02.05.2013 / 09:19
0

Já respondi, ainda gostaria de listar outra abordagem.

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

Isso excluirá o diretório principal (e também os subdiretórios) e, agora, você poderá aplicar o comando que quisermos aplicar sobre ele.

> > Opções:
-mindepth 1: Para excluir o diretório raiz
-maxdepth 1: Para evitar a análise de subdiretórios. (Para determinado cenário como questionado, você não precisa disso). -tipo d: lista apenas os tipos de diretório. Esta opção deve vir após o mindepth maxdepth usar.

    
por 12.10.2018 / 10:20