Se eu entendi sua pergunta corretamente, você deseja ver uma lista do proprietário dos maiores diretórios (em ordem decrescente). Em outras palavras:
- Você deseja classificar diretórios com base no tamanho deles
- Encontre o ID do usuário de cada um dos 20 principais diretórios maiores.
Se você quiser ver a saída no formato ls -l
, tente o seguinte:
(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }' | sort --key=5,5hr
Exemplo de saída:
drwxrwxrwx 1 root root 1017G Jun 20 15:44 Raw_data_files
drwxrwxrwx 1 root root 188G May 12 11:34 Old_data
drwxrwxrwx 1 root root 8.8G Jul 12 15:28 backups
drwxrwxrwx 1 root root 1.4G Jun 29 15:32 randomized_sets
-rwxrwxrwx 1 root root 124M May 22 10:41 archive_web.html.7z
-rwxrwxrwx 1 root root 113M Jan 15 14:51 example1.tif
-rwxrwxrwx 1 root root 113M Apr 15 13:27 example3.pdf
-rwxrwxrwx 1 root root 1.0M Apr 15 09:17 sample_info.xlsx
-rwxrwxrwx 1 root root 1.0M Apr 27 09:20 sample_info2.xlsx
-rwxrwxrwx 1 root root 1.0M Jun 12 09:18 sample_run.R
Como você pode ver, isso fornece uma lista classificada (com base no tamanho) de todos os arquivos e dos diretórios. Mas você está interessado apenas em diretórios / pastas e seu tamanho e id de usuário. Portanto, se você adicionar um pipe simples a tudo isso (o comando acima) e usar o comando grep
(isto é, adicionar | grep "^d" --color=never"
ao comando acima), você só terá os diretórios listados e os arquivos não serão mais listados.
drwxrwxrwx 1 root root 1017G Jun 20 15:44 Raw_data_files
drwxrwxrwx 1 root root 188G May 12 11:34 Old_data
drwxrwxrwx 1 root root 8.8G Jul 12 15:28 backups
drwxrwxrwx 1 root root 1.4G Jun 29 15:32 randomized_sets
Portanto, neste caso, o comando completo será o seguinte:
(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }' | sort --key=5,5hr | grep "^d" --color=never"
Tudo o que você precisa fazer agora é adicionar apenas head -20
ao comando acima para ver apenas os 20 maiores diretórios.
Todo o crédito vai para o usuário do Stack Overflow Sebi . Veja este tópico em SO para mais informações: Usando ls para listar diretórios e seus tamanhos totais