Como reivindicar espaço em disco removendo todos os arquivos e links físicos?

Como reivindicar espaço em disco removendo todos os arquivos e links físicos?

Estou tentando há horas descobrir isso, mas parece que não consigo fazer isso

Minha pergunta é: tenho um nome de arquivo fácil e há 4 subdiretórios diferentes nele insira a descrição da imagem aqui

agora o que preciso fazer é excluir tudo em foo (incluindo links físicos) e recuperar todo o espaço em disco de foo.

Tentei remover todo o arquivo digitando.

rm foo/*

mas não remove os links físicos que estão nos outros subdiretórios.

Então tentei ver se os inodes correspondentes

encontre foo -type f -ls | organizar

e foi isso que consegui com este comando

insira a descrição da imagem aqui

este comando não mostra os outros subdiretórios apenas foo/

alguém por favor pode me ajudar. Obrigado.

Responder1

Se você deseja excluir todos os arquivos vinculados a qualquer um dos arquivos encontrados por meio de descendente foo, com ferramentas GNU, você pode fazer:

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"

Isso pressupõe GNU df, GNU awk, GNU finde um shell como o shell GNU ( bash) que suporta substituição de processo ( <(...)).

Isso também pressupõe $dirque não comece -ou não seja um findpredicado (como !, (...).

Acima, procuramos arquivos $diraos quais todo o sistema de arquivos pertence. Você pode substituir $mountpointapenas pelo diretório pai de $dir( .neste caso) ou outrosubdiretórios( 123 ABC defaqui) se você souber que todos os hardlinks estão apenas lá.

No código acima, registramos os números de inode de todos os arquivos que não são de diretório com uma contagem de links maior que 1 que são encontrados via descendente $dir. E procure esses números de inode em todo o sistema de arquivos (pelo menos seções dele que não são mascaradas por outros sistemas de arquivos e que você tem permissão para percorrer). os números de inode são exclusivos apenas por sistema de arquivos, portanto, usamos -xdevpara garantir que verificamos apenas o sistema de arquivos $direncontrado.

Responder2

rm -rf foo

rm- remova arquivos ou diretórios.

  • -fignore arquivos e argumentos inexistentes, nunca solicite.
  • -rremova diretórios e seu conteúdo recursivamente.

informação relacionada