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" 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.
-Icon xargsy 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 rmlo 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
xargsenfoque 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