Extrai um caminho de arquivo compatível unix com espaço da saída do comando

1

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 no meu script?

du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'

A saída será

/Users/user/Big

Qual é inutilizável, onde estou procurando um resultado como:

/Users/user/Big\ folder
    
por Vinh Francis Guyait 09.04.2017 / 18:30

3 respostas

0

POSIXLY:

du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'',;q"

Sem -h , du result incluiu um número simples para o tamanho, para que possamos classificá-lo facilmente sem extra grep .

Usando sed para executar a exclusão somente na primeira linha, em seguida, para sair, salvamos uma invocação de head .

    
por 09.04.2017 / 18:58
1

Ao fazer o processamento automatizado, não torne sua vida mais complicada usando números em unidades diferentes. Não passe -h para du . Em seguida, você pode usar a 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

Isso sempre imprime uma linha, mesmo que o maior subdiretório contenha menos de 1 GB. Se não é isso que você quer, você pode substituir a condicional "é a saída vazia" por "é o número menor que o limite".

Para extrair o nome do diretório, pegue a saída e remova a peça para a primeira guia.

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')}
    
por 09.04.2017 / 21:47
0

Outra maneira de extrair o caminho que você deseja é o comando read depois que você terminar de fazer o du stuff e sort-ed e depois passar para o while/read

du.. sort.. | while read x d; do echo "$d"; done
    
por 10.04.2017 / 02:24