bash - que - directorios de linux y sus funciones
En Unix, ¿cómo eliminas todo en el directorio actual y debajo de él? (10)
Creo que esta respuesta es mejor:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Si su directorio de nivel superior se llama
images
, ejecuterm -r images/*
. Esto utiliza el operador*
shell glob para ejecutarrm -r
en cada archivo o directorio dentro de las imágenes.
básicamente subes un nivel, y luego dices borrar todo dentro del directorio X. De esta forma, todavía está especificando qué carpeta debe eliminarse su contenido, lo cual es más seguro que simplemente decir ''eliminar todo aquí'', mientras conserva la carpeta original (que a veces desea porque no está permitido o simplemente no quiere para modificar los permisos existentes de la carpeta)
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 en todos los subdirectorios debajo de él y el contenido de todos esos subdirectorios?
Eliminará todos los archivos / directorios debajo del actual.
find -mindepth 1 -delete
Si desea hacer lo mismo con otro directorio cuyo nombre tenga, 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
. Hazlo sin la -delete
de -delete
para obtener una lista de las cosas que se eliminarán.
Es correcto que rm –rf .
eliminará todo en la corriente directamente incluyendo cualquier subdirectorio y su contenido. El punto único ( .
) Significa el directorio actual. tenga cuidado de no hacer rm -rf ..
ya que el punto doble ( ..
) significa el directorio anterior.
Dicho esto, si eres como yo y tienes múltiples ventanas de terminal abiertas al mismo tiempo, será mejor que estés seguro y usas rm -ir .
Veamos los argumentos del comando para entender por qué.
En primer lugar, si observa la página man del comando rm
( man rm
en la mayoría de Unix), observa que –r
significa "eliminar el contenido de los directorios recursivamente". Entonces, haciendo 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 borra todos los archivos y directorios en el directorio actual y nunca te pide que confirmes que realmente quieres hacer eso. -f
es particularmente peligroso si ejecuta el comando bajo un usuario de privilegios ya que puede eliminar el contenido de cualquier directorio sin tener la oportunidad de asegurarse de que eso es realmente lo que desea.
Por otro lado, en rm -ri .
el -i
que reemplaza el -f
significa "solicitud 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 se alegre y borre todos tus archivos.
En mis primeros días sysadmin hice una rm -rf /
en un sistema mientras estaba conectado con privilegios completos (root). El resultado fue dos días después de restaurar el sistema a partir de copias de seguridad. Es por eso que ahora empleo rm -ri
ahora.
La solución segura y general más simple es probablemente:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
Lo que siempre hago es escribir
rm -rf *
y luego presione ESC- * , y bash expandirá * a una lista explícita de archivos y directorios en el directorio de trabajo actual.
Los beneficios son:
- Puedo revisar la lista de archivos para eliminar antes de presionar ENTER.
- El historial de comandos no contendrá "rm -rf *" con el comodín intacto, que luego podría reutilizarse accidentalmente en el lugar equivocado en el momento equivocado. En cambio, el historial de comandos tendrá los nombres de archivo reales allí.
- También se volvió útil una o dos veces para responder "espere un segundo ... ¿qué archivos acabo de eliminar?". Los nombres de archivo son visibles en el buffer de desplazamiento de terminal o en el historial de comandos.
De hecho, me gusta tanto que he convertido en el comportamiento predeterminado de TAB con esta línea en .bashrc:
bind TAB:insert-completions
Practica la computación 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 --
dígale a rm
que <dir-to-remove>
no es una opción de línea de comandos, incluso cuando comienza con un guión.
Qué tal si:
rm -rf "$(pwd -P)"/*
Utilizar
rm -rf *
Actualización: El .
representa el directorio actual, pero no podemos usar esto. El comando parece tener controles explícitos para .
y ..
Usa el comodín comodín en su lugar. Pero esto puede ser riesgoso.
Una versión más segura que IMO debe usar:
rm -ri *
(Esto le solicita confirmación antes de eliminar cada archivo / directorio).
rm -rf *
No lo hagas, es peligroso. ASEGÚRESE DE ESTAR EN EL DIRECTORIO CORRECTO.
asegúrese de estar en el directorio correcto
rm -rf *