o comando :
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
está me dando:
41G /Users/user/Big folder
Como posso extrair o caminho para reutilizá-lo em meu script?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
Irá produzir
/Users/user/Big
O que é inutilizável, onde procuro um resultado como:
/Users/user/Big\ folder
Responder1
Ao fazer processamento automatizado, não complique sua vida usando números em unidades diferentes. Não passe -h
para du
. Então você pode usar uma classificação numérica simples na saída, e seu script ainda funcionará se você tiver mais de 1 TB em um dos diretórios.
du -s ~/* | sort -k 1n | tail -n1
Isto sempre imprime uma linha, mesmo que o maior subdiretório contenha menos de 1 GB. Se não for isso que você deseja, você pode substituir a condicional “a saída está vazia” por “o número é menor que o limite”.
Para extrair o nome do diretório, pegue a saída e remova a parte da primeira aba.
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
Responder2
POSIXMENTE:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
Sem -h
, du
o resultado inclui um número simples para tamanho, para que possamos classificá-lo facilmente sem acréscimo grep
.
Usando sed
para realizar a exclusão na primeira linha e só depois encerrando, salvamos uma head
invocação.
Responder3
Outra forma de extrair o caminho que você deseja é via read
comando depois de terminar de fazer as du
coisas sort-ed
e depois passar para owhile/read
du.. sort.. | while read x d; do echo "$d"; done