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 sefile
informar que o arquivo tem o tipo MIMEimage/jpeg
. O operador||
garante que o comandorm
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.