Como remover muitos arquivos com nomes semelhantes?

Como remover muitos arquivos com nomes semelhantes?

Eu tenho muitos arquivos txt, chamados como file1.txt file2.txt file3.txt ... file1000.txt Como posso excluir todos esses arquivos? Sou novo no Unix e estou preocupado em excluir acidentalmente outros arquivos do meu diretório.

Eu olhei para outras perguntas, mas não tenho certeza, posso fazer algo como

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

e, portanto, excluir todos os meus arquivos com o mesmo nome e apenas números diferentes e manter os poucos que desejo? E esta linha deve excluir apenas arquivos no meu diretório/pasta de trabalho, correto?

Existe uma maneira de usar o rm, mas apenas especificar os arquivos que desejo excluir de uma só vez?

Responder1

rm file*.txtremoverá todos os arquivos do diretório atual que possuem nomes que começam com string filee terminam com string .txt.

Se houvermuitosdestes, você receberá um erro "Lista de argumentos muito longa". Neste caso, você pode usar

find . -maxdepth 1 -name 'file*.txt' -delete

em vez de.

Isso usará o findcomando para encontrar qualquer arquivo cujo nome corresponda file*.txtao diretório atual e excluí-lo. A -maxdepth 1opção restringe finda entrada de quaisquer subdiretórios diferentes de .(o diretório atual).

O comando não faz diferença entre arquivos e diretórios (assim como rm file*.txttambém não faria). Se você quiser ter certeza de excluir apenas arquivos normais, use

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

Para findimplementações que não possuem o não padrão -deletee/ou -maxdepthopções, use

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

Ou você pode simplesmente recorrer a um loop simples, mas lento:

for name in file*.txt; do
    rm -f "$name"
done

Responder2

Se não houver outros arquivos com a mesma estrutura, use o chamado globbing com o prefixo 'file'. Um asterisco significa qualquer outra string (incl. string vazia). Verifique primeiro com 'ls' (lista) em vez de 'rm':

ls file*.txt

Você também pode restringir isso a pelo menos um único número após 'arquivo' e qualquer outra coisa depois:

ls file[[:digit:]]*.txt

Responder3

Se não tiver certeza se o seu padrão incluirá outros arquivos, você poderia, por exemplo:

  • mova-os para outra pasta (temporária) e mv PATTERNverifique a lista de arquivos e se tudo estiver bem, remova a pasta temporária.

  • usar rm -i PATTERN. Você terá que confirmar cada remoção manualmente.

  • antes de fazer rmvocê pode fazer um ls PATTERNou echo PATTERNe verificar se a lista está ok.

informação relacionada