Limpando pastas, exceto tipos específicos de arquivos

1

Eu tenho uma árvore de pastas como segue:

parent folder
....folder A
....folder B
    ....folder 1
    ....folder 2
....folder C
    ....folder 1
    ....folder 2
....folder D
    ....folder 1
    ....folder 2
. 
.

Dentro de cada pasta eu tenho um punhado de arquivos. Esses arquivos têm extensões diferentes (zip, tar.gz, jpeg, bmp, csv, xlsx, doc, txt, ... etc)

  1. Como posso excluir todos os arquivos nas pastas, exceto os arquivos * .jpeg.

  2. Como posso excluir todos os arquivos das pastas, exceto mais de um tipo de arquivo (por exemplo, exceto os arquivos * .jpeg, * .csv)

Para conseguir isso, eu estava pensando em usar o comando:

find . type -f -exec  

Mas eu não sei como completá-lo! ..

Alguma outra maneira de fazer isso?

    
por Gilles 19.07.2016 / 20:27

1 resposta

0
find . type -f ! -name '*.jpeg' ! -name '*.csv' -delete

Leia isto como: percorrer o diretório atual; quando você encontrar um arquivo que é um arquivo regular e cujo nome não corresponde a *.jpeg e cujo nome não corresponde a *.csv , exclua-o.

Se a sua versão de find não tiver -delete , faça find invocar o comando rm : replacete -delete by -exec rm {} + .

Em zsh (com setopt extended_glob ativado), *~(PATTERN) corresponde a todos os arquivos que não correspondem a PATTERN . Use o qualificador de glob D para incluir arquivos de ponto e . para incluir apenas arquivos regulares. Altere . para ^/ para excluir todos os não diretórios (exceto os que correspondem aos padrões excluídos).

rm **/*~*.(jpeg|csv)(D.)
    
por 20.07.2016 / 02:25

Tags