¿Cómo puedo eliminar todos los archivos con una extensión particular en una carpeta particular?

¿Cómo puedo eliminar todos los archivos con una extensión particular en una carpeta particular?

Si configuro el directorio actual/de trabajo (navegando hacia él usando cd) en algún directorio en particular y luego escribo:

rm *.xvg

¿Qué hará este comando? ¿Es cierto que el comando anteriorsoloeliminar archivos con la extensión.xvg soloen el directorio de trabajo?

Estaba nervioso por intentar esto antes de preguntar, porque quiero estar absolutamente seguro de que el comando anterior solo eliminará .xvgarchivos.UBICADO EN EL DIRECTORIO DE TRABAJO.

Respuesta1

si, rm *.xvglo harásoloelimine los archivos con la extensión especificada en suactualdirectorio.

AbienUna forma de asegurarse de que realmente está en el directorio donde desea eliminar sus archivos es usar el pwdcomando que mostrará su directorio actual y luego verificar lsque encuentre los archivos que espera.

Si le preocupa un poco emitir el rmcomando, hay dos cosas que puede hacer:

  1. escriba ls *.xvgpara ver una lista de los archivos que se verían afectados por este comando.

  2. A menos que tengas unlotede archivos, siempre puedes usar el -iinterruptor de línea de comando para rm(también existe para cpy mv). El uso rm -i *.xvgle preguntará para cada archivo individual si está bien eliminarlo, por lo que podrá estar seguro de que no se eliminará nada que no esperaba. (Sin embargo, esto será tedioso si tienes muchos archivos :)

Respuesta2

No es necesario navegar hasta el directorio, solo use

rm /some/dir/*.xvg 

En caso de que tenga un error tipográfico o similar en la ruta, donde /som/dir no existe:

cd /som/dir
rm *.xvg

eliminará accidentalmente todos los archivos .xvg en el directorio actual. El primer comando no lo hará y no es necesario volver a ejecutar el CD.

Una forma alternativa sería utilizar buscar:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

Respuesta3

Sí, rm *.xvgsolo eliminará los archivos que terminen .xvgen su directorio actual. Este es el por qué.

Cuando escribes un comando como este, el trabajo se divide entre el shell que estás usando (supongamos 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 arg3cuando se inician. En el caso de rm, se interpretan como una lista de nombres de archivos completos que se eliminarán. Entonces, si está en un directorio que contiene el archivo foo.bar, al escribirlo delete 'foo.*'se obtendrá rm: 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 *.baren el mismo directorio, se 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 nombres de archivos bashaquí. Una de las expansiones más comunes es *, que se expande a nombres de archivos en el directorio actual.

Una forma sencilla de ver los globos en funcionamiento es utilizar echo, que imprime todos los argumentos que se le pasan a través del shell. Entonces, al escribir echo *en el mismo directorio se obtendrá el resultado foo.bar. Entonces, cuando escribes rm *.bar, lo que realmente sucede es que el shell expande la lista de argumentos a foo.bary luego la pasa al rmcomando.

Hay algunas formas de controlar el globbing. En versiones recientes de bash, por ejemplo, puede activar una opción llamada globstar que realizará una expansión recursiva. Al escribir echo **/*.barse mostrará una lista de todos los archivos que terminan .baren todas las subcarpetas. Por lo tanto, escribir rm **/*.barbash habilitado para globstar eliminará recursivamente todos los archivos coincidentes en las subcarpetas.

Respuesta4

Dominio :

  rm ./*.pgm

funciona para mi

Dominio:

rm *.pgm

da el comando de error (en polaco, traducido):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

en

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)

información relacionada