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
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
conxargs
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 querm
lo que no quieres.O usando
find
:Esta solución tratará con nombres de archivos extraños .
fuente
-type f
xargs
enfoque conrm -f
.Consulte la sección de expansión de nombre de archivo de la página de manual de bash:
fuente
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:
Entonces, si es correcto, simplemente use:
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.
fuente
Esto funciona en mi mac:
rm $(ls | grep -e '^A*[0..9]2$')
fuente
find
El comando también funciona con expresiones regulares.Comprueba qué archivos se van a eliminar
Borrar archivos
fuente