Remova todos os arquivos, exceto alguns, de uma pasta no Unix [duplicado]

2

Eu geralmente enfrento esse problema. Eu tenho um conjunto de arquivos em uma pasta e gostaria de excluir todos eles, exceto alguns.

Por exemplo: tenho arquivos nomeados de acordo com a data de criação (como 11-1-11.tar, 10-1-11.tar e assim por diante). Agora eu gostaria de excluir arquivos como 10-1-11, 9-1-11 e assim por diante, mas não alguns outros arquivos. Basicamente eu gostaria de impor o que todos devem ser excluídos e o que deve ser mantido. Como eu faria isso?

    
por Community 11.01.2011 / 11:23

4 respostas

3

Se isso é BASH, você poderia considerar o uso de globbing estendido. Para ativar:

shopt -s extglob

(Coloque isso no seu .bashrc , se quiser, ou ligue-o quando precisar.)

E, por exemplo, para excluir todos os arquivos exceto nome_do_arquivo1 e nome_do_arquivo2

rm !(filename1|filename2)

Você também pode usar curingas como * também.

Ou você pode excluir todos os que correspondem a um padrão:

rm +([0-9])-+([0-9])-+([0-9]).tar

excluirá todos os arquivos # - # - #. tar (em que os números têm 1 ou mais dígitos).

Não está claro se isso atenderia às suas necessidades ou não. Mais detalhes aqui .

    
por 11.01.2011 / 21:53
2

Se o nome do arquivo corresponder à data de criação do arquivo, pode ser mais fácil excluir arquivos com mais de um dia.

Isso é facilmente alcançado com o comando find:

find /home/john/files -type f -mtime +30 -delete

isso excluiria os arquivos em /home/john/files , que têm uma data de modificação há mais de 30 dias.

    
por 11.01.2011 / 12:15
0

você também pode fazer o que quiser com tmpwatch

link

tmpwatch -m 24 /path/to/dir

excluirá todos os arquivos no diretório com mais de um dia desde o último uso (-m).

    
por 11.01.2011 / 12:20
0

Eu acho que você pode usar vários comandos UNIX em um pipe e isso resolverá seu problema. Uma das possíveis soluções é usar find | grep | xargs rm -rf . Por exemplo:

$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf

Para excluir alguns arquivos, basta colocar seus nomes no arquivo /path/to/exclude/file . Por exemplo:

very_useful_file.tar.gz
very_important_file.jpg

Para evitar a limpeza incorreta de arquivos importantes, sugiro fazer uma cópia de backup de todos os arquivos. Também é útil usar xargs com a opção -p , que ...Prompt the user about whether to run each command line and read a line from the terminal.

É possível usar a ferramenta find sem o grep / xargs. Será algo assim: find /path/to/tree -type f ! -name "exlude_pattern"

Antes de usar estes comandos, leia atentamente as páginas de manual para find/grep/xargs ! Eles podem ser muito perigosos:).

    
por 11.01.2011 / 12:24

Tags