Como recursivamente remover todos, mas lista de arquivos?

3

Como posso recursivamente remover tudo em um diretório, EXCETO uma pequena lista de arquivos a serem preservados? Por exemplo, vamos tentar remover todos os arquivos, exceto os chamados f2 e f5 .

# Create a testing ground
mkdir -p d{1..3}
touch d{1..3}/f{1..5}

# Remove all files EXCEPT ones named f2 and f5.
find . -type f -not -name ('f2'|'f5') -type f -exec rm -f '{}' +

# Remove empty directories
find . -type d -empty -delete

Produz:

bash: syntax error near unexpected token '('

O objetivo final é executá-lo dentro de um aplicativo maior de espaço de usuário C, mas usar system() para executar um comando de linha de comando parece muito mais fácil.

    
por tarabyte 03.12.2015 / 01:27

1 resposta

6
find . -type f -not \( -name f2 -o -name f5 \) -delete

deve fazer isso.

-delete é igual a -exec rm -f '{}' + , mas mais curto e ainda mais eficiente. Execute-o primeiro sem ele, para confirmar que ele obtém apenas os arquivos que você realmente deseja excluir.

    
por 03.12.2015 / 01:39