Intenté eliminar archivos que comienzan con A y terminan con 2 números, pero no hace nada.
Lo que probé:
rm ^A*[0..9]2$
Donde me equivoco
Intenté eliminar archivos que comienzan con A y terminan con 2 números, pero no hace nada.
Lo que probé:
rm ^A*[0..9]2$
Donde me equivoco
Respuestas:
Puede usar el siguiente comando para eliminar todos los archivos que coincidan con sus criterios:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Cómo funciona:
ls
enumera todos los archivos (uno por línea ya que el resultado se canaliza).
grep -P "^A.*[0-9]{2}$"
filtra la lista de archivos y deja solo aquellos que coinciden con la expresión regular ^A.*[0-9]{2}$
.*
indica cualquier número de apariciones de .
, donde .
hay un comodín que coincide con cualquier carácter.
[0-9]{2}
indica exactamente dos ocurrencias de [0-9]
, es decir, cualquier dígito.
xargs -d"\n" rm
se ejecuta rm line
una vez por cada line
cosa que se canaliza a él.
Donde me equivoco
Para empezar, rm
no acepta una expresión regular como argumento. Además del comodín *
, todos los demás personajes se tratan literalmente.
Además, su expresión regular está ligeramente apagada. Por ejemplo, *
significa cualquier ocurrencia de ...
una expresión regular, por lo A*
partidos A
, AA
etc., e incluso una cadena vacía.
Para obtener más información, visite Regular-Expressions.info .
-d"\n
interruptor soluciona el problema de espacios.
grep -P
(expresión regular Perl). grep -E
puede funcionar en este caso.
-I
con xargs
y siempre probar primero con comandos no letales:xargs -d"\n" -I {} echo "{}"
ls
? Vea esta pregunta que apunta a este artículo . Debido a las dificultades, es posible que rm
lo que no quieres.
O usando find
:
find your-directory/ -name 'A*[0-9][0-9]' -delete
Esta solución tratará con nombres de archivos extraños .
-type f
xargs
enfoque con rm -f
.
Consulte la sección de expansión de nombre de archivo de la página de manual de bash:
rm A*[0-9][0-9]
La solución con regexp es 200 veces mejor, incluso con eso puedes ver qué archivo se eliminará antes de usar el comando, cortando la tubería final:
ls | grep -P "^A.*[0-9]{2}$"
Entonces, si es correcto, simplemente use:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
Esto es 200 veces mejor porque si trabajas con Unix es importante saber cómo usar grep. Es muy poderoso si sabes cómo usarlo.
find
El comando también funciona con expresiones regulares.
Comprueba qué archivos se van a eliminar
find . -regex '^A.*[0-9]{2}$'
Borrar archivos
find . -regex '^A.*[0-9]{2}$' -delete