Exclui todos os arquivos não jpeg

2

Eu tenho exercícios, nos quais tenho que excluir todos os arquivos, que não são jpeg .

Eu tentei find -type f |xargs file| grep -iv 'jpeg' , mas não funciona.

    
por diego9403 15.08.2015 / 08:17

1 resposta

6

Excluindo com base no tipo de arquivo mimety

Para excluir todos os arquivos regulares não-JPEG no diretório atual ou em seus subdiretórios, use:

find . -type f -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;

Essa abordagem é segura para todos os nomes de arquivos. Ele funcionará mesmo que os nomes dos arquivos tenham novas linhas ou outros caracteres difíceis.

Como funciona

  • find . -type f

    Isso inicia um comando find , restringindo os arquivos encontrados para arquivos regulares, -type f .

  • -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;

    Para todos os arquivos encontrados, isso executa um comando bash para testar o tipo do arquivo. Em particular, file -bi "$1" | grep -q image/jpeg retornará verdadeiro se file informar que o arquivo tem o tipo MIME image/jpeg . O operador || garante que o comando rm a seguir seja executado apenas para arquivos que falharam no teste jpeg. Assim, todos os arquivos não-JPEG são deletados.

Excluindo com base no nome do arquivo

Para excluir todos os arquivos cujos nomes não terminam em .jpeg :

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

Essa abordagem também é segura para todos os nomes de arquivos. Ele funcionará mesmo que os nomes dos arquivos tenham novas linhas ou outros caracteres difíceis.

Como funciona

  • find .

    Encontre todos os arquivos no diretório atual e em seus subdiretórios

  • -type f

    Restringir-nos apenas aos arquivos regulares

  • ! -name '*.jpeg'

    -name '*.jpeg' localizaria todos os arquivos cujos nomes terminam em .jpeg . O ponto de exclamação, ! , no entanto, significa negação. Portanto, ! -name '*.jpeg' restringe nossa pesquisa a arquivos cujos nomes não terminam em .jpeg .

  • -delete

    Isso diz a find para excluir os arquivos que correspondem aos critérios acima.

Teste

Para testar o comando, desative o -delete :

find . -type f ! -name '*.jpeg'

Isso mostrará quais arquivos serão excluídos quando a ação -delete for usada.

    
por 15.08.2015 / 08:24