Si configuro el directorio actual / de trabajo (navegando hacia él usando cd
) en algún directorio particular y luego escribo:
rm *.xvg
¿Qué hará este comando? ¿Es cierto que el comando anterior solo eliminará archivos con la extensión .xvg
solo en el directorio de trabajo?
Estaba nervioso por intentar esto antes de preguntar, porque quiero estar absolutamente seguro de que el comando anterior solo eliminará los .xvg
archivos UBICADOS EN EL DIRECTORIO DE TRABAJO .
rm -f {*.xvg,.*.xvg}
para eliminar también los archivos ocultos. Yrm -R -f {*.xvg,.*.xvg}
para eliminar también directorios.No necesita navegar al directorio, solo use
En el caso de que tenga un error tipográfico o similar en la ruta, donde / som / dir no existe:
borrará accidentalmente todos los archivos .xvg en el directorio actual. El primer comando no lo hará, y no necesita volver a cd.
Una forma alternativa sería usar find:
fuente
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 argumentosprog arg1 arg2 arg3
cuando se inician. En el caso derm
, se interpretan como una lista de nombres de archivos totalmente calificados para ser eliminados. Entonces, si está en un directorio que contiene el archivofoo.bar
, escribirdelete '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 escribirecho *
en el mismo directorio dará como resultadofoo.bar
. Entonces, cuando escriberm *.bar
, lo que realmente está sucediendo es que el shell expande la lista de argumentos yfoo.bar
luego lo pasa alrm
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, escribirrm **/*.bar
en bash habilitado con globstar eliminará de forma recursiva todos los archivos coincidentes en las subcarpetas.fuente
Comando:
funciona para mi
Mando:
da un comando de error (en polaco, traducido):
en
fuente