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" rmse ejecuta rm lineuna vez por cada linecosa que se canaliza a él.
Donde me equivoco
Para empezar, rmno 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, AAetc., e incluso una cadena vacía.
Para obtener más información, visite Regular-Expressions.info .
-d"\ninterruptor soluciona el problema de espacios.grep -P(expresión regular Perl).grep -Epuede funcionar en este caso.-Iconxargsy 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 quermlo que no quieres.O usando
find:Esta solución tratará con nombres de archivos extraños .
fuente
-type fxargsenfoque 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
findEl comando también funciona con expresiones regulares.Comprueba qué archivos se van a eliminar
Borrar archivos
fuente