Sé que esto eliminará todo en un subdirectorio y debajo de él:
rm -rf <subdir-name>
Pero, ¿cómo se elimina todo en el directorio actual, así como todos los subdirectorios debajo de él y el contenido de todos esos subdirectorios?
Sé que esto eliminará todo en un subdirectorio y debajo de él:
rm -rf <subdir-name>
Pero, ¿cómo se elimina todo en el directorio actual, así como todos los subdirectorios debajo de él y el contenido de todos esos subdirectorios?
Respuestas:
Practica la informática segura. Simplemente suba un nivel en la jerarquía y no use una expresión comodín:
cd ..; rm -rf -- <dir-to-remove>
Los dos guiones --
indican rm
que <dir-to-remove>
no es una opción de línea de comandos, incluso cuando comienza con un guión.
rm ./
, podría escribir accidentalmente, lo rm . /
que podría ser un desastre.
Eliminará todos los archivos / directorios debajo del actual.
find -mindepth 1 -delete
Si desea hacer lo mismo con otro directorio cuyo nombre tiene, puede simplemente nombrarlo
find <name-of-directory> -mindepth 1 -delete
Si desea eliminar no solo los subdirectorios y archivos del mismo, sino también el directorio en sí, omita -mindepth 1
. Hágalo sin el -delete
para obtener una lista de las cosas que se eliminarán.
-mindepth 1
si está especificando un directorio ( find <name-of-directory> -mindepth 1 -delete
). De lo contrario, Johannes tiene razón, no eliminará el directorio de trabajo actual (cuando se use find -delete
).
find -mindepth 1 -delete
pero tengo illegal option -- m
pero funcionó muy bien cuando me quité la opción mindepth find . -delete
Lo que siempre hago es escribir
rm -rf *
y luego presione ESC- * , y bash expandirá el * a una lista explícita de archivos y directorios en el directorio de trabajo actual.
Los beneficios son:
De hecho, me gusta tanto que lo he convertido en el comportamiento predeterminado para TAB con esta línea en .bashrc:
bind TAB:insert-completions
--
esta respuesta? Este enfoque es impresionante en general, debo decir.
Utilizar
rm -rf *
Actualización: .
significa directorio actual, pero no podemos usarlo. El comando parece tener comprobaciones explícitas para .
y ..
. Utilice el comodín globbing en su lugar. Pero esto puede resultar arriesgado.
Una versión más segura de la OMI es usar:
rm -ri *
(esto le solicita confirmación antes de eliminar cada archivo / directorio).
Es correcto que rm –rf .
eliminará todo en el actual directamente, incluidos los subdirectorios y su contenido. El único punto ( .
) significa el directorio actual. tenga cuidado de no hacerlo rm -rf ..
ya que el punto doble ( ..
) significa el directorio anterior.
Dicho esto, si usted es como yo y tiene múltiples ventanas de terminal abiertas al mismo tiempo, será mejor que esté seguro y use rm -ir .
Veamos los argumentos del comando para entender por qué.
Primero, si observa la rm
página de comando man ( man rm
en la mayoría de Unix), nota que –r
significa "eliminar el contenido de los directorios de forma recursiva". Por lo tanto, hacerlo rm -r .
solo eliminaría todo en el directorio actual y todo lo que está debajo.
En rm –rf .
el agregado -f significa "ignorar archivos inexistentes, nunca preguntar". Ese comando elimina todos los archivos y directorios en el directorio actual y nunca le pide que confirme que realmente desea hacerlo. -f
es particularmente peligroso si ejecuta el comando con un usuario con privilegios, ya que podría eliminar el contenido de cualquier directorio sin tener la oportunidad de asegurarse de que eso sea realmente lo que desea.
Por otro lado, en rm -ri .
el -i
que reemplaza los -f
medios "preguntar antes de cualquier eliminación". Esto significa que tendrás la oportunidad de decir "¡oups! Eso no es lo que quiero" antes de que rm borre felizmente todos tus archivos.
En mis primeros días de administrador de sistemas, hice un rm -rf /
en un sistema mientras estaba conectado con todos los privilegios (root). El resultado fue que pasaron dos días restaurando el sistema desde las copias de seguridad. Es por eso que ahora empleo rm -ri
ahora.
hacer seguro de que estás en el directorio correcto
rm -rf *
Creo que esta respuesta es mejor:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Si se llama a su directorio de nivel superior
images
, ejecuterm -r images/*
. Esto usa el operador de shell glob*
para ejecutarrm -r
en cada archivo o directorio dentro de las imágenes.
básicamente subes un nivel y luego dices eliminar todo dentro del directorio X. De esta manera, todavía está especificando qué carpeta debe eliminar su contenido, lo cual es más seguro que simplemente decir 'eliminar todo aquí', mientras se conserva la carpeta original (que a veces desea porque no está permitido o simplemente no desea para modificar los permisos existentes de la carpeta)