Tengo un directorio que contiene archivos con nombres
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
y así. Me gustaría eliminar todos aquellos que son múltiplos de 5000.
Intenté lo siguiente: printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
pero eso me dio la respuestarm: missing operand
.
Hay otra manera de hacer esto?
ls
primero.Respuestas:
No necesita un bucle o comandos adicionales donde los tiene
Bash Shell Brace Expansion
.Explicación :
{start..end..step}
. El-f
mensaje para ignorar en archivos inexistentes.Ps Para mantener la seguridad y verificar qué archivos se eliminarán, primero realice una prueba con:
fuente
rm
no lee de la entrada estándar. Podrías hacerlo:Incluyo la
-i
opción derm
solicitar antes de la eliminación para que pueda verificar el comportamiento. Una vez que esté seguro de que está haciendo lo que quiere, puede omitir esa opción.Editar: Alternativamente, puedes hacer:
Esa forma puede ser más familiar si ha realizado alguna programación.
fuente
No puede canalizar a un programa como si el contenido de la canalización fuera argumentos. Se envía a través de stdin.
Debe usar xarg para este propósito:
pero primero puedes probar con echo para ver si todo está como pretendes:
fuente
seq
tiene la opción-f
/--format
, puede usarla en lugar de esta solución con laprintf
sustitución de comandos.Alguien me corrige si me equivoco, pero si todos los archivos que comienzan
rho_
son de esta forma, ¿no es equivalente a hacerlo?Dado que un número (que no sea 0) es un múltiplo de 5000 si y solo si termina en 0000 o 5000.
(0 es un caso especial, ya que es un múltiplo de 5000, pero generalmente se escribe sin ceros a la izquierda adicionales. Si no pretendía incluir 0, quítelo de la línea anterior).
Por supuesto, esto solo debe usarse si todos los
rho_*.txt
archivos en su directorio tienen la forma deseada. No lo use si su directorio también contienerho_please_dont_delete_me_5000.txt
.(Nota matemática: esto funciona precisamente porque todos los factores primos de 5000, es decir, 2 y 5, también son factores primos de la base en la que estamos trabajando, 10. Equivalentemente, hay una potencia suficientemente grande de 10 (es decir, 10000) que es divisible por 5000. No hay un truco similar para hacer coincidir todos aquellos que son múltiplos de 3000.)
fuente