Como alterar a ordem de recursão

2

Eu procurei classificar o resultado de du antes e só vi sugestões para sort do 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, eu tenho um backup incremental:

Se os links físicos de du doublely count contiverem o conteúdo,

# 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 dir de data compartilha muitos links para os arquivos de outras pastas .... É um backup incremental.

Mas o resultado mais significativo se parece com isso.

# 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 sem sentido porque avaliou os dirs em uma ordem arbitrária e, portanto, fornece informações muito menos significativas sobre o quanto mudou de uma data para a próxima.

Estou procurando uma maneira de controlar o pedido du avalia diretórios.

    
por couling 25.05.2017 / 15:47

1 resposta

1

Expandindo o comentário do ridgy , versões mais recentes do du pode ler uma lista de arquivos a serem verificados usando a opção --files0-from , então você pode fazer:

printf "%s
$ du -hxd1 foo
111M    foo/2017-05-20
4.0K    foo/2017-05-19
4.0K    foo/2017-05-30
111M    foo
" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total

Por exemplo:

$ printf "%s
$ 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
" 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

E:

printf "%s
$ du -hxd1 foo
111M    foo/2017-05-20
4.0K    foo/2017-05-19
4.0K    foo/2017-05-30
111M    foo
" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total

Você pode usar find se houver muitos arquivos para glob por printf , mas é um pouco detalhado:

$ printf "%s
$ 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
" 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
    
por 07.02.2018 / 05:35