¿'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?


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


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.


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


-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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.