Já examinei a classificação do resultado du
antes e só vi sugestões para sort
o resultado, como du | sort
.
Isso é aceitável para a maioria dos usos, mas é especificamente inútil ao listar vários diretórios com hardlinks. Por exemplo, tenho um backup incremental:
Se du
contar duplamente os links físicos, o conteúdo será assim
# du -hl --max-depth 1 /backup/saturn/ | sort -k 2
3.2G /backup/saturn/
456M /backup/saturn/2017-05-19
458M /backup/saturn/2017-05-20
461M /backup/saturn/2017-05-21
464M /backup/saturn/2017-05-22
462M /backup/saturn/2017-05-23
462M /backup/saturn/2017-05-24
465M /backup/saturn/2017-05-25
Mas esses resultados não são verdadeiros porque cada diretório datado compartilha muitos links físicos com os arquivos de outros diretórios.... É um backup incremental.
Mas o resultado mais significativo é assim.
# du -h --max-depth 1 /backup/saturn/ | sort -k 2
666M /backup/saturn/
29M /backup/saturn/2017-05-19
53M /backup/saturn/2017-05-20
25M /backup/saturn/2017-05-21
40M /backup/saturn/2017-05-22
462M /backup/saturn/2017-05-23
14M /backup/saturn/2017-05-24
46M /backup/saturn/2017-05-25
Isso é um pouco absurdo porque avaliou os diretórios em uma ordem arbitrária e, portanto, fornece informações muito menos significativas sobre o quanto mudou de uma data para outra.
Então, estou procurando uma maneira de controlar a ordem du
que avalia os diretórios.
Responder1
Expandindocomentário de ridgy, as versões mais recentes do du
podem ler uma lista de arquivos a serem verificados usando a --files0-from
opção, então você pode fazer:
printf "%s\0" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total
Por exemplo:
$ du -hxd1 foo
111M foo/2017-05-20
4.0K foo/2017-05-19
4.0K foo/2017-05-30
111M foo
E:
$ printf "%s\0" foo/*/ | sort -z | du --files0-from=- -h --total
101M foo/2017-05-19/
11M foo/2017-05-20/
4.0K foo/2017-05-30/
111M total
Você pode usar find
se houver muitos arquivos para glob printf
, mas é um pouco detalhado:
$ find foo -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | du --files0-from=- -h --total
101M foo/2017-05-19
11M foo/2017-05-20
4.0K foo/2017-05-30
111M total