du rapporte à tort un répertoire vide

13

J'utilise ces commandes:

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

les deux rapports:

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

tandis que ces répertoires contiennent:

$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

Pourquoi génère- t- duon des rapports 4.0Kpour ./Lightroom_catalog_from_win_backup et comment puis-je faire en sorte que les rapports soient corrects?

PS: autres informations système:

$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
la source
Pour s'appuyer sur les réponses déjà données jusqu'à présent, que /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'revient-il?
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
Cela présente un problème avec les réponses car le fichier avec le nombre de liens de trois n'est pas compté ailleurs dans la ducommande. Vous n'avez donc que deux sous-répertoires dans votre répertoire de travail?
doneal24
non, j'en ai environ 15 autres
adrhc

Réponses:

23

Je peux reproduire si les fichiers sont des liens durs:

~ 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

Il s'agit d'un comportement attendu. Depuis les dudocuments GNU :

Si deux ou plusieurs liens durs pointent vers le même fichier, un seul des liens durs est compté. L'ordre des arguments du fichier affecte les liens qui sont comptés, et le changement de l'ordre des arguments peut changer les nombres et les entrées qui sortent.

Si vous avez vraiment besoin de tailles répétées de liens durs, essayez l' -loption:

' -l'
' --count-links'
Comptez la taille de tous les fichiers, même s'ils sont déjà apparus (en lien dur).

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

Notez comment le nombre de liens est 3pour les deux fichiers Lightroom 5 Catalog Linux.lrcatet zbackup.batdans Lightroom_catalog_from_win_backup.

Cela signifie que ces deux fichiers sont liés en dur à (autres noms pour) d'autres fichiers quelque part. Lorsque vous exécutez dusur un répertoire ou un ensemble de fichiers, chaque lien dur n'est compté qu'une seule fois.

Exemple:

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

Ce comportement est explicitement imposé par la norme POSIX pour ledu utilitaire :

Un fichier qui se produit plusieurs fois sous un opérande de fichier et qui a un nombre de liens supérieur à 1 doit être compté et écrit pour une seule entrée.

Certaines duimplémentations ont des options non standard pour désactiver ce comportement. Pour GNU du, cela se fait avec l' -loption.

Kusalananda
la source
3

Cela fonctionne presque certainement correctement. ducompte chaque fichier une seule fois, quel que soit le nombre de fois où il est référencé. Il est probable que vos deux répertoires contiennent le même ensemble de fichiers liés en dur.

La page de manuel pour GNU duoffres -l, --count-linkspour désactiver cette optimisation standard (voir man dupour vérifier si votre mise en œuvre comprend cela). Ou vous exécutez dudeux fois, une fois pour chaque répertoire.

roaima
la source