find comando para excluir alguns diretórios e omitir outros que não estão funcionando

1

Em um diretório, desejo excluir determinados subdiretórios e, ao mesmo tempo, excluir outros. Alguns pelo proprietário e alguns pelo nome. Eu configurei a página por homem, mas nenhum arquivo foi excluído, mesmo aqueles que não foram expressamente excluídos. Durante o teste Se eu remover todos os parâmetros de exclusão, todos os arquivos serão excluídos, como esperado. Não recebo nenhum erro quando o executo, apenas nada acontece. Gostaria de receber uma revisão do roteiro. Nomes alterados para proteger os inocentes.

find /nobackup/. -name '*' -type d ! -user 'foo' \! -user 'foo1' ! -user 'foo2' ! -user 'foo3' \! -user 'foo4' ! -name 'acmecache' -delete
    
por John 09.01.2016 / 02:56

2 respostas

0

Eu adicionaria -depth para que árvores de arquivos possam ser deletadas em uma única passagem. O -name '*' é irrelevante.

Sua descrição diz que você deseja excluir certos diretórios . O -delete excluirá apenas os diretórios vazios. Seu código, conforme escrito, irá felizmente descer para o diretório acmecache e remover quaisquer diretórios que não sejam de propriedade de the_foo * _ users. Eu vou assumir que não é o que você pretendia, então você precisa usar -prune .

Tente isso em vez disso. Remova o echo quando estiver satisfeito com o resultado

find /nobackup -depth -type d \( \( -user 'foo' -o -user 'foo1' -o -user 'foo2' -o -user 'foo3' -o -user 'foo4' -o -name 'acmecache' \) -prune \) -exec echo rm -rf {} \;
    
por 09.01.2016 / 13:11
0

O script parece correto.

O que ele faz é o seguinte: excluir todos os diretórios em /nobackup e abaixo que não pertencem a foo usuários, excluindo também os diretórios chamados acmecache .

O argumento -name '*' parece completamente desnecessário.

Considere também que -delete remove apenas diretórios vazios . Mas imprimirá um erro se o diretório não estiver vazio.

    
por 09.01.2016 / 07:09

Tags