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*.txt
removerá todos os arquivos do diretório atual que possuem nomes que começam com string file
e 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 find
comando para encontrar qualquer arquivo cujo nome corresponda file*.txt
ao diretório atual e excluí-lo. A -maxdepth 1
opção restringe find
a 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*.txt
també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 find
implementações que não possuem o não padrão -delete
e/ou -maxdepth
opçõ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 PATTERN
verifique 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
rm
você pode fazer umls PATTERN
ouecho PATTERN
e verificar se a lista está ok.