No meu sistema macOS, tenho uma pasta com mais de 7.000 imagens e preciso excluir as imagens que possuem um hífen no nome do arquivo. Eu tentei os seguintes comandos sem obter resposta depois de cd
entrar no diretório (sou novo no terminal):
rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm
Responder1
O padrão *-*
corresponderá a qualquer nome no diretório atual quecontém um traço(literalmente "um nome que contém pelo menos um-
, possivelmente prefixado e/ou sufixado por alguma outra string"). Isso significa que você deve ser capaz de fazer
rm ./*-*
ou
rm -- *-*
para excluir todos os arquivos com nomes contendo um -
caractere no diretório atual.
No zsh
shell, usando*-*(.)
como padrão restringiria a correspondência apenas a arquivos regulares (não a diretórios, embora rm
não fosse possível excluir diretórios de qualquer maneira).
Se houver muitos arquivos para rm
serem manipulados de uma só vez, use find
assim:
find . -maxdepth 1 -type f -name '*-*' -delete
estou a usar-maxdepth 1
para restringir a pesquisa apenas ao diretório atual e adicionei -type f
para excluir apenas arquivos regulares.
Você também pode usar um loop (um pouco lento):
for name in ./*-*; do
rm "$name"
done
Algumas pessoas preferem "one-liners", e esse loop pode ser escrito como
for name in ./*-*; do rm "$name"; done
... embora digitá-lo como um comando multilinha fosse definitivamente possível na maioria dos shells modernos.