He investigado cómo ordenar el resultado du
antes y solo he visto sugerencias para sort
el 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 du
los 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 du
de evaluación de los directorios.
Respuesta1
Ampliandocomentario de ridgy, las versiones más recientes du
pueden leer una lista de archivos para escanear usando la --files0-from
opció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 find
si 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