Extraia o caminho de arquivo compatível com Unix com espaço da saída do comando

Extraia o caminho de arquivo compatível com Unix com espaço da saída do comando

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 -hpara 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, duo resultado inclui um número simples para tamanho, para que possamos classificá-lo facilmente sem acréscimo grep.

Usando sedpara realizar a exclusão na primeira linha e só depois encerrando, salvamos uma headinvocação.

Responder3

Outra forma de extrair o caminho que você deseja é via readcomando depois de terminar de fazer as ducoisas sort-ede depois passar para owhile/read

du.. sort.. | while read x d; do echo "$d"; done

informação relacionada