du riporta erroneamente directory vuota


13

Sto usando questi comandi:

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

entrambi riportano:

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

mentre quelle directory contengono:

$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

Perché la dusegnalazione è 4.0Kper ./Lightroom_catalog_from_win_backup e come posso fare in modo che riferisca correttamente?

PS: altre informazioni di 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

Sulla base delle risposte già fornite finora, cosa /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'ritorna?
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
Ciò presenta un problema con le risposte poiché il file con il conteggio dei collegamenti di tre non viene conteggiato altrove nel ducomando. Quindi hai solo due sottodirectory nella tua directory di lavoro?
doneal24,

no, ne ho circa altri 15
adrhc il

Risposte:


23

Posso riprodurre se i file sono hard link:

~ 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

Questo è un comportamento previsto. Dai documenti GNUdu :

Se due o più collegamenti fissi puntano allo stesso file, viene conteggiato solo uno dei collegamenti fisici. L'ordine degli argomenti del file influenza quali collegamenti vengono conteggiati e la modifica dell'ordine degli argomenti può modificare i numeri e le voci che generano.

Se hai davvero bisogno di dimensioni ripetute di hard link, prova l' -lopzione:

' -l'
' --count-links'
Conta le dimensioni di tutti i file, anche se sono già comparsi (come collegamento reale).

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

15

Si noti come è il conteggio dei collegamenti 3per i due file Lightroom 5 Catalog Linux.lrcate zbackup.batin Lightroom_catalog_from_win_backup.

Ciò significa che questi due file sono strettamente collegati a (nomi aggiuntivi per) altri file da qualche parte. Quando si esegue dusu una directory o un set di file, ogni collegamento reale viene conteggiato una sola volta.

Esempio:

$ 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   .

Questo comportamento è esplicitamente richiesto dallo standard POSIX per l' duutilità :

Un file che si presenta più volte sotto un operando di file e che ha un conteggio dei collegamenti maggiore di 1 deve essere conteggiato e scritto per una sola voce.

Alcune duimplementazioni hanno opzioni non standard per disabilitare questo comportamento. Per GNU du, questo viene fatto con l' -lopzione.


3

Quasi sicuramente funziona correttamente. duconta ogni file una sola volta, indipendentemente da quante volte viene referenziato. È probabile che le tue due directory contengano lo stesso set di file hard-link.

La pagina man di GNU duoffre -l, --count-linksper disattivare questa ottimizzazione standard (vedi man duper verificare se la tua implementazione lo include). Oppure esegui dudue volte, una volta per ogni directory.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.