¿Cómo reclamar espacio en disco eliminando todos los archivos y enlaces físicos?

¿Cómo reclamar espacio en disco eliminando todos los archivos y enlaces físicos?

He estado intentando durante horas resolver esto pero parece que no puedo hacerlo.

Mi pregunta es: tengo un nombre de archivo fácil y contiene 4 subdirectorios diferentes. ingrese la descripción de la imagen aquí

ahora lo que tengo que hacer es eliminar todo lo que hay debajo de foo (incluidos los enlaces físicos) y recuperar todo el espacio en disco de foo.

Intenté eliminar todo el archivo escribiendo.

rm foo/*

pero no elimina los enlaces físicos que se encuentran en los otros subdirectorios.

Luego intenté ver si los inodos coincidentes

encontrar foo -tipo f -ls | clasificar

y esto es lo que obtuve con este comando

ingrese la descripción de la imagen aquí

este comando no muestra los demás subdirectorios solo foo/

Puede alguien ayudarme. Gracias.

Respuesta1

Si desea eliminar todos los archivos que están vinculados a cualquiera de los archivos encontrados de forma descendente foo, con las herramientas GNU, puede hacer:

dir=foo
mountpoint=$(df --output=target -- "$dir" | tail -n +2)

awk -v RS='\0' -v ORS='\0' '
  ARGIND == 1 {inum[$0]; next}
  {i=$0; getline}
  i in inum
 ' <(find -- "$dir" -xdev ! -type d -links +1 -printf '%i\0') \
   <(find -- "$mountpoint" -xdev ! -type d -printf '%i\0%p\0') |
  xargs -r0 rm -f

rm -rf -- "$dir"

Eso supone GNU df, GNU awk, GNU findy un shell como el shell GNU ( bash) que admite la sustitución de procesos ( <(...)).

Eso también supone $dirque no comienza con -o no es un findpredicado (como !, (...).

Arriba buscamos archivos en todo el sistema de archivos $diral que pertenece. Puede reemplazar $mountpointsolo con el directorio principal de $dir( .en este caso) o el otrosubdirectorios( 123 ABC defaquí) si sabe que todos los enlaces físicos solo están allí.

En el código anterior, registramos los números de inodo de todos los archivos que no son de directorio con un recuento de enlaces mayor que 1 que se encuentran de forma descendente $dir. Y busque esos números de inodo en todo el sistema de archivos (al menos en secciones que no estén enmascaradas por otros sistemas de archivos y que tenga permisos para atravesar). Los números de inodo son únicos por sistema de archivos, por lo que los usamos -xdevpara asegurarnos de escanear solo el sistema de archivos $diren el que se encuentra.

Respuesta2

rm -rf foo

rm- eliminar archivos o directorios.

  • -fignore archivos y argumentos inexistentes, nunca pregunte.
  • -reliminar directorios y sus contenidos de forma recursiva.

información relacionada