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 fIsso 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/jpegretornará verdadeiro sefileinformar que o arquivo tem o tipo MIMEimage/jpeg. O operador||garante que o comandorma 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 fRestringir-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. -
-deleteIsso diz a
findpara 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.