Exclua arquivos em um diretório que tenha um hífen no nome do arquivo

Exclua arquivos em um diretório que tenha um hífen no nome do arquivo

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 cdentrar 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 zshshell, usando*-*(.) como padrão restringiria a correspondência apenas a arquivos regulares (não a diretórios, embora rmnão fosse possível excluir diretórios de qualquer maneira).

Se houver muitos arquivos para rmserem manipulados de uma só vez, use findassim:

find . -maxdepth 1 -type f -name '*-*' -delete

estou a usar-maxdepth 1 para restringir a pesquisa apenas ao diretório atual e adicionei -type fpara 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.

informação relacionada