du ошибочно сообщает пустой каталог


13

Я использую эти команды:

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

оба отчета:

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

в то время как эти каталоги содержат:

$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

Почему duотчеты 4.0Kдля ./Lightroom_catalog_from_win_backup и как я могу сделать это, чтобы сообщить правильно?

PS: другая системная информация:

$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

Чтобы опираться на ответы, которые уже были даны до сих пор, что /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'возвращает?
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
Это создает проблему с ответами, поскольку файл с числом ссылок три не учитывается в других местах duкоманды. Таким образом, у вас есть только два подкаталога в вашем рабочем каталоге?
doneal24

нет, у меня есть приблизительно 15 других
adrhc

Ответы:


23

Я могу воспроизвести, если файлы жесткие ссылки:

~ 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

Это ожидаемое поведение. Из документации GNUdu :

Если две или более жесткие ссылки указывают на один и тот же файл, учитывается только одна из жестких ссылок. Порядок аргументов файла влияет на то, какие ссылки учитываются, и изменение порядка аргументов может изменить числа и записи, которые вы выводите.

Если вам действительно нужны повторяющиеся размеры жестких ссылок, попробуйте -lвариант:

' -l'
' --count-links'
Подсчитайте размер всех файлов, даже если они уже появились (как жесткая ссылка).

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

15

Обратите внимание на количество ссылок 3для двух файлов Lightroom 5 Catalog Linux.lrcatи zbackup.batв Lightroom_catalog_from_win_backup.

Это означает, что эти два файла жестко связаны с (другими именами) где-то другими файлами. Когда вы запускаете duкаталог или набор файлов, каждая жесткая ссылка учитывается только один раз.

Пример:

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

Такое поведение явно предписано стандартом POSIX для duутилиты :

Файл, который встречается несколько раз под одним файловым операндом и имеет число ссылок больше 1, должен учитываться и записываться только для одной записи.

В некоторых duреализациях есть нестандартные опции для отключения этого поведения. Для GNU duэто делается с помощью -lопции.


3

Это почти наверняка работает правильно. duсчитает каждый файл только один раз, независимо от того, сколько раз на него ссылаются. Вероятно, в двух ваших каталогах содержится один и тот же набор жестко связанных файлов.

Страница людей для GNU duпредложений -l, --count-linksчтобы отключить эту стандартную оптимизацию (см , man duчтобы проверить , если ваша реализация включает в себя это). Или вы запускаете duдважды, по одному разу для каждого каталога.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.