Eu tenho um diretório que contém arquivos com nomes
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
e assim por diante. Gostaria de excluir todos os que são múltiplos de 5000.
Eu tentei o seguinte:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
mas isso me deu a resposta rm: missing operand
.
Há outra maneira de fazer isso?
ls
primeiro.Respostas:
Você não precisa de um loop ou comandos extras onde estiver
Bash Shell Brace Expansion
.Explicação :
{start..end..step}
. O-f
prompt para ignorar em arquivos inexistentes.Ps Para manter a segurança e verificar quais arquivos serão excluídos, faça um teste primeiro com:
fonte
rm
não lê da entrada padrão. Você poderia fazer:Incluo a
-i
opção derm
avisar antes da remoção para que você possa verificar o comportamento. Quando estiver confiante de que está fazendo o que deseja, você poderá omitir essa opção.Edit: Como alternativa, você pode fazer:
Esse formulário pode ser mais familiar se você tiver feito alguma programação.
fonte
Você não pode canalizar para um programa como se o conteúdo do canal fosse argumento. É enviado através de stdin.
Você deve usar o xarg para esta finalidade:
mas primeiro você pode tentar com eco para ver se tudo está como você pretende:
fonte
seq
tiver a opção-f
/,--format
você poderá usá-la em vez dessaprintf
solução alternativa e substituição de comando.Alguém me corrija se eu estiver errado, mas se todos os arquivos iniciados
rho_
tiverem esse formato, não é equivalente a issoComo um número (diferente de 0) é um múltiplo de 5000 se, e somente se, termina em 0000 ou 5000.
(0 é um caso especial, pois é um múltiplo de 5000, mas normalmente é escrito sem zeros à esquerda adicionais. Se você não pretendia incluir 0, retire-o da linha acima.)
Obviamente, isso só deve ser usado se todos os
rho_*.txt
arquivos em seu diretório tiverem a forma desejada. Não use se o seu diretório também contiverrho_please_dont_delete_me_5000.txt
.(Nota matemática: isso funciona precisamente porque todos os fatores primos de 5000, ou seja, 2 e 5, também são fatores primos da base em que estamos trabalhando, 10. Equivalentemente, existe uma potência suficientemente grande de 10 (ou seja, 10000) que é divisível por 5000. Não existe truque semelhante para combinar todos os que são múltiplos de 3000.)
fonte