Sí, rm *.xvg
solo eliminará los archivos que terminan .xvg
en su directorio actual. Este es el por qué.
Cuando escribe un comando como este, el trabajo se divide entre el shell que está utilizando (supongamos que bash) y el comando binario.
Puede localizar el binario escribiendo which rm
. Este pequeño programa se encarga de desvincular archivos. Programas como este se pueden iniciar desde la línea de comandos y pueden leer una lista de argumentos prog arg1 arg2 arg3
cuando se inician. En el caso de rm
, se interpretan como una lista de nombres de archivos totalmente calificados para ser eliminados. Entonces, si está en un directorio que contiene el archivo foo.bar
, escribir delete 'foo.*'
resultará enrm: foo.*: No such file or directory
. Tenga en cuenta las comillas simples alrededor del patrón del archivo, le dicen al shell que pase el argumento al shell tal como está.
Sin embargo, si escribe rm *.bar
en el mismo directorio, eliminará el archivo. Lo que sucede aquí es que su shell, que es el programa que está utilizando para escribir comandos, está realizando algunas transformaciones antes de pasar los argumentos al comando. Uno de ellos se llama 'expansión de nombre de archivo', también conocido como 'globbing'. Puede ver una lista de expansiones de nombre de archivo bash aquí . Una de las expansiones más comunes es *
, que se expande a nombres de archivo en el directorio actual.
Una forma simple de ver los globos en el trabajo es usar echo
, que imprime todos los argumentos que se le pasan a través del shell. Entonces escribir echo *
en el mismo directorio dará como resultado foo.bar
. Entonces, cuando escribe rm *.bar
, lo que realmente está sucediendo es que el shell expande la lista de argumentos y foo.bar
luego lo pasa al rm
comando.
Hay algunas formas de controlar el globbing. En versiones recientes de bash, por ejemplo, puede activar una opción llamada globstar que hará una expansión recursiva. Al escribir echo **/*.bar
se mostrará una lista de todos los archivos que terminan .bar
en todas las subcarpetas. Por lo tanto, escribir rm **/*.bar
en bash habilitado con globstar eliminará de forma recursiva todos los archivos coincidentes en las subcarpetas.
rm -f {*.xvg,.*.xvg}
para eliminar también los archivos ocultos. Yrm -R -f {*.xvg,.*.xvg}
para eliminar también directorios.