Como reivindicar espaço em disco removendo todos os arquivos e hard links?

0

Eu tenho tentado por horas para descobrir isso, mas não consigo fazer isso

Minha pergunta Eu tenho um nome de arquivo fácil e há 4 subdiretórios diferentes nele

agoraoquetenhoquefazeréapagartudoemfoo(incluindohardlinks)erecuperartodooespaçoemdiscodefoo.

Eutenteiremovertodooarquivodigitando.

rmfoo/*

masnãoremoveoslinksfísicosqueestãonosoutrossubdiretórios.

Entãoeutenteiverseosinodescorrespondentes

findfoo-typef-ls|sort

eéissoqueeurecebicomessecomando

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

alguém por favor pode me ajudar. Obrigado.

    
por Saja Peiris 04.11.2016 / 07:06

2 respostas

0

Se você deseja excluir todos os arquivos com link de hardware para qualquer um dos arquivos encontrados por meio da descendente foo , com as ferramentas GNU, você pode fazer:

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

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

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

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

Isso pressupõe% GNUdf, GNU awk , GNU find e um shell como o shell GNU ( bash ) que suporta a substituição de processos ( <(...) ).

Isso também pressupõe que $dir não comece com - ou que não seja um predicado find (como ! , ( ...).

Acima nós procuramos por arquivos em todo o sistema de arquivos $dir pertence a. Você pode substituir $mountpoint apenas pelo diretório pai de $dir ( . neste caso) ou pelos outros subdiretórios ( 123 ABC def here) se você souber que todos os hardlinks estão 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 por meio de descendente $dir . E procure por 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ões para percorrer). Os números de inode são únicos por sistema de arquivos, então usamos -xdev para ter certeza de que só verificamos o único sistema de arquivos $dir encontrado.

    
por 04.11.2016 / 09:22
0
rm -rf foo

rm - remove arquivos ou diretórios.

  • -f ignora arquivos e argumentos inexistentes, nunca avisa.
  • -r remove diretórios e seus conteúdos de forma recursiva.
por 04.11.2016 / 08:32