Cómo cambiar el orden de recursividad

Cómo cambiar el orden de recursividad

He investigado cómo ordenar el resultado duantes y solo he visto sugerencias para sortel resultado como du | sort.

Esto es aceptable para la mayoría de los usos, pero es específicamente inútil cuando se enumeran varios directorios con enlaces físicos. Por ejemplo tengo una copia de seguridad incremental:

Si dulos enlaces duros del recuento doble, el contenido se verá así

# 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

Pero estos resultados no son ciertos porque cada directorio fechado comparte muchos enlaces físicos a los archivos de otros directorios... Es una copia de seguridad incremental.

Pero el resultado más significativo se ve así.

# 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

Esto es un poco absurdo porque ha evaluado los directorios en un orden arbitrario y, por lo tanto, proporciona información mucho menos significativa sobre cuánto ha cambiado de una fecha a la siguiente.

Entonces estoy buscando una manera de controlar el orden dude evaluación de los directorios.

Respuesta1

Ampliandocomentario de ridgy, las versiones más recientes dupueden leer una lista de archivos para escanear usando la --files0-fromopción, por lo que puedes hacer:

printf "%s\0" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total

Por ejemplo:

$ du -hxd1 foo
111M    foo/2017-05-20
4.0K    foo/2017-05-19
4.0K    foo/2017-05-30
111M    foo

Y:

$ 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

Puedes usarlo findsi hay demasiados archivos para buscar printf, pero es un poco detallado:

$ 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

información relacionada