Como alterar a ordem de recursão

Como alterar a ordem de recursão

Já examinei a classificação do resultado duantes e só vi sugestões para sorto 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 ducontar 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 duque avalia os diretórios.

Responder1

Expandindocomentário de ridgy, as versões mais recentes do dupodem ler uma lista de arquivos a serem verificados usando a --files0-fromopçã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 findse 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

informação relacionada