¿'Rm files *' elimina todas las coincidencias de todos los subdirectorios?

13

Quiero eliminar cualquier archivo que se parezca wordpress-891.sql del directorio actual (no dentro de los subdirectorios).

¿ rm wordpress-*.sqlFuncionará o también eliminará las coincidencias de los subdirectorios?

HorusCoding
fuente
1
Por otro lado, mientras que todas las otras respuestas terminan correctas, hay un giro más: en realidad es bash, no el comando rm, que expande el comodín. Si tiene diez archivos coincidentes en su directorio, rm no verá el comodín, sino más bien diez argumentos individuales. Si desea que rm haga la expansión, debe encerrar su argumento entre comillas simples. Para rm, no hace la diferencia, pero en algunos otros contextos sí. Por lo general, cuando el comodín se refiere a algo distinto de los archivos, como los paquetes apt-get.
Kevin Keane
3
@KevinKeane, rmno hace la expansión del nombre de archivo ... rm "foo*"intentaría eliminar un archivo con un asterisco literal en el nombre.
ilkkachu

Respuestas:

20

No. El globbing normal *no es recursivo y tampoco lo es rm.

Si un nombre de directorio coincide, no se eliminará; necesita el -rindicador para eliminar un directorio.

Por lo tanto, es seguro hacerlo si está seguro de que desea eliminar esos archivos.

También puedes hacer rminteractivos

rm -i wordpress-*.sql

luego solicitará confirmación antes de eliminar cada archivo

Zanna
fuente
14

Sí, hace el truco por usted y elimina todos los archivos con ese esquema en el directorio actual. Y NO, no elimina archivos dentro de los subdirectorios.

Cuando no esté seguro de lo que sucede cuando ejecuta un comando como:

rm wordpress-*.sql

entonces solo ejecútalo usando ls:

ls wordpress-*.sql

los archivos que ve en la salida son los que se eliminarán.

Cuando intenta obtener una lista como:, foo*es mejor usar -dswitch con lspara evitar que se enumeren archivos dentro de un directorio llamado foobar/etc.

ls -d foo*

Este truco funciona para comandos que no se utilizan para hacer el trabajo de forma recursiva.

La otra cosa que puede hacer es escribir su entrada deseada, por ejemplo: wordpress-*luego presione Ctrl+ Alt+ *, y ahora todas las coincidencias se escriben automáticamente frente a su comando.

Ravexina
fuente
44
Mi método favorito:printf "%s\n" wordpress-*.sql
wjandrea
1
También puedes fingir que te gusta Echo echo rm file*. Especialmente busca nombres de archivos hostiles como-rf
eckes
@eckes: puede cubrirlos de manera más segura con rm ./*o rm -- *.
David Foerster
Sí, o use xargs -0@DavidFoerster
eckes
si ir ls foo*y usted tiene un directorio llamado foobar, también se obtiene una lista de los contenidos de ese directorio, tan claro lsque no es realmente la mejor manera a lo que el rmgolpeará
ilkkachu
12

No, rm no se repite a través de subdirectorios.

Consulte Eliminar archivos coincidentes en todos los subdirectorios: SuperUser para conocer los métodos para eliminar archivos en subdirectorios.

Si alguna vez le preocupa eliminar accidentalmente algo importante, use gvfs-trash(que envía archivos a la papelera) en lugar de rm(que elimina archivos de forma permanente).

wjandrea
fuente
Gracias por la gvfs-trashmención aprendí algo que hoy apenas lo uso ...
George Udosen
-1

Si desea buscar y eliminar todos los archivos coincidentes wordpress-*.sql, puede usarfind comando. :)

Por ejemplo, desea eliminar todos los archivos coincidentes con wordpress-*.sqlunder test_dir, haga lo siguiente.

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

Cada vez que el findprograma realmente encuentra un archivo coincidente, intenta ejecutar un comando después de la -execopción. En este caso rm -f {}se ejecutará y {}se cambiará al nombre del archivo de coincidencia. P.ej

rm -f wordpress-169.sql

También puede establecer la profundidad de los subdirectorios con la -maxdepthopción.

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

Tenga en cuenta que debe especificar la -maxdepthopción antes que otras opciones. De lo contrario, puede obtener los resultados que realmente no desea ver.

Parque Sung-Jin
fuente
1
OP quiere lo contrario: no recurrir a subdirectorios.
Melebius
2
GNU find: "las opciones afectan a todas las pruebas, incluidas las pruebas especificadas antes de la opción", incluye la lista de opciones a continuación -maxdepth. Use en -exec rm -f {} +lugar de -exec \;, o mejor aún, solo-delete
ilkkachu