du informa erróneamente un directorio vacío


13

Estoy usando estos comandos:

du -sh --apparent-size ./*
du -sh ./*

ambos reportando:

4.0K    ./Lightroom_catalog_from_win_backup
432M    ./Lightroom catalog - wine_backup

mientras que esos directorios contienen:

$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18  2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi  227 Nov 21  2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi  227 Dec 17 09:35 zbackup.bat

¿Por qué duse informa 4.0Kpara ./Lightroom_catalog_from_win_backup y cómo podría hacerlo para informar correctamente?

PD: otra información del sistema:

$stat --file-system $HOME
  File: "/home/gigi"
    ID: 5b052c62a5a527bb Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 720651086  Free: 155672577  Available: 119098665
Inodes: Total: 183050240  Free: 178896289

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

Para construir sobre las respuestas ya dadas hasta ahora, ¿qué /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'devuelve?
doneal24

ls -li ./*/"Lightroom 5 Catalog Linux.lrcat" 36831321 -rwxrwx--- 1 gigi gigi 432M Mar 18 2018 ./Lightroom catalog - wine_backup/Lightroom 5 Catalog Linux.lrcat 36833201 -rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 ./Lightroom_catalog_from_win_backup/Lightroom 5 Catalog Linux.lrcat
adrhc

1
Esto presenta un problema con las respuestas ya que el archivo con el recuento de enlaces de tres no se cuenta en ninguna otra parte del ducomando. ¿Entonces tiene solo dos subdirectorios en su directorio de trabajo?
doneal24

no, tengo aproximadamente 15 más
adrhc

Respuestas:


23

Puedo reproducir si los archivos son enlaces duros:

~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M    foo
4.0K    bar

Este es el comportamiento esperado. De los dudocumentos de GNU :

Si dos o más enlaces duros apuntan al mismo archivo, solo se cuenta uno de los enlaces duros. El orden del argumento del archivo afecta a qué enlaces se cuentan, y cambiar el orden del argumento puede cambiar los números y las entradas que se generan.

Si realmente necesita tamaños repetidos de enlaces duros, pruebe la -lopción:

' -l'
' --count-links'
Cuente el tamaño de todos los archivos, incluso si ya han aparecido (como un enlace duro).

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar

15

Observe cómo el recuento de enlaces es 3para los dos archivos Lightroom 5 Catalog Linux.lrcaty zbackup.baten Lightroom_catalog_from_win_backup.

Esto significa que estos dos archivos están vinculados a (otros nombres para) otros archivos en alguna parte. Cuando se ejecuta duen un directorio o un conjunto de archivos, cada enlace duro solo se cuenta una vez.

Ejemplo:

$ ls -l
total 41024
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file1
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file2

$ du -h file1
10.0M   file1

$ du -h file2
10.0M   file2

$ du -h .
10.0M   .

Este comportamiento está explícitamente ordenado por el estándar POSIX para la duutilidad :

Un archivo que ocurre varias veces bajo un operando de archivo y que tiene un recuento de enlaces mayor que 1 se contará y se escribirá para una sola entrada.

Algunas duimplementaciones tienen opciones no estándar para deshabilitar este comportamiento. Para GNU du, esto se hace con la -lopción.


3

Es casi seguro que funciona correctamente. ducuenta cada archivo solo una vez, independientemente de cuántas veces se haga referencia. Es probable que sus dos directorios contengan el mismo conjunto de archivos vinculados.

La página de manual de GNU duofrece -l, --count-linkspara desactivar esta optimización estándar ( man duverifique si su implementación incluye esto). O ejecuta dudos veces, una para cada directorio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.