du meldet fälschlicherweise leeres Verzeichnis

13

Ich benutze diese Befehle:

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

beide berichten:

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

während diese Verzeichnisse enthalten:

$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

Warum duwird 4.0Kfür ./Lightroom_catalog_from_win_backup berichtet, und wie kann ich es schaffen, dass der Bericht korrekt erstellt wird?

PS: Sonstige Systeminformationen:

$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
adrhc
quelle
Was kehrt /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'zurück, um auf den bisher gegebenen Antworten aufzubauen ?
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
Dies stellt ein Problem mit den Antworten dar, da die Datei mit der Verknüpfungsanzahl von drei an anderer Stelle im duBefehl nicht gezählt wird . Sie haben also nur zwei Unterverzeichnisse in Ihrem Arbeitsverzeichnis?
doneal24
nein, ich habe ungefähr 15 andere
adrhc

Antworten:

23

Ich kann reproduzieren, wenn die Dateien Hardlinks sind:

~ 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

Dies ist das erwartete Verhalten. Aus den GNU- duDokumenten :

Wenn zwei oder mehr Hardlinks auf dieselbe Datei verweisen, wird nur einer der Hardlinks gezählt. Die Argumentreihenfolge der Datei wirkt sich darauf aus, welche Links gezählt werden. Durch Ändern der Argumentreihenfolge werden möglicherweise die Zahlen und Einträge geändert, die ausgegeben werden.

Wenn Sie wirklich wiederholte Größen von Hardlinks benötigen, probieren Sie die -lOption:

' -l'
'--count-links '
Zähle die Größe aller Dateien, auch wenn sie bereits erschienen sind (als fester Link).

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar
muru
quelle
15

Beachten Sie, wie die Linkanzahl 3für die beiden Dateien istLightroom 5 Catalog Linux.lrcat und zbackup.batin istLightroom_catalog_from_win_backup .

Dies bedeutet, dass diese beiden Dateien fest mit (zusätzlichen Namen für) andere Dateien verknüpft sind. Wenn Sie duin einem Verzeichnis oder einer Reihe von Dateien ausführen , wird jede feste Verbindung nur einmal gezählt.

Beispiel:

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

Dieses Verhalten wird vom POSIX-Standard für das Dienstprogramm ausdrücklich vorgeschriebendu :

Eine Datei, die unter einem Dateioperanden mehrmals vorkommt und eine Verknüpfungsanzahl größer als 1 hat, wird für nur einen Eintrag gezählt und geschrieben.

Einige duImplementierungen verfügen über nicht standardmäßige Optionen zum Deaktivieren dieses Verhaltens. Für GNU dugeschieht dies mit der -lOption.

Kusalananda
quelle
3

Es funktioniert mit ziemlicher Sicherheit richtig. duzählt jede Datei nur einmal, unabhängig davon, wie oft darauf verwiesen wird. Es ist wahrscheinlich, dass Ihre beiden Verzeichnisse denselben Satz fest verbundener Dateien enthalten.

Die man - Seite für GNU dubietet -l, --count-linksdiesen Standard Optimierung auszuschalten (siehe man duüberprüfen , ob Ihre Implementierung dieses enthält). Oder Sie führen duzweimal für jedes Verzeichnis eine aus.

Roaima
quelle