du salah melaporkan direktori kosong

13

Saya menggunakan perintah ini:

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

keduanya melaporkan:

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

sedangkan direktori tersebut mengandung:

$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

Mengapa dupelaporan 4.0Kuntuk ./Lightroom_catalog_from_win_backup dan bagaimana saya bisa melaporkannya dengan benar?

PS: informasi sistem lainnya:

$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
sumber
Untuk membangun jawaban yang sudah diberikan sejauh ini, apa yang /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'kembali?
selesai24
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
Ini menyajikan masalah dengan jawaban karena file dengan jumlah tautan tiga tidak dihitung di tempat lain dalam duperintah. Jadi, Anda hanya memiliki dua subdirektori di direktori kerja Anda?
selesai24
tidak, saya memiliki sekitar 15 lainnya
adrhc

Jawaban:

23

Saya dapat mereproduksi jika file tersebut berupa tautan keras:

~ 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

Ini adalah perilaku yang diharapkan. Dari dokumen GNUdu :

Jika dua atau lebih tautan keras menunjuk ke file yang sama, hanya satu tautan keras yang dihitung. Urutan argumen file memengaruhi tautan mana yang dihitung, dan mengubah urutan argumen dapat mengubah angka dan entri yang dihasilkan du.

Jika Anda benar-benar membutuhkan tautan keras ukuran berulang, coba -lopsi:

' -l'
' --count-links'
Hitung ukuran semua file, meskipun sudah muncul (sebagai hard link).

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

Perhatikan bagaimana menghitung link adalah 3untuk dua file Lightroom 5 Catalog Linux.lrcatdan zbackup.batdi Lightroom_catalog_from_win_backup.

Ini berarti bahwa kedua file ini sulit ditautkan ke (nama tambahan untuk) file lain di suatu tempat. Saat Anda menjalankan dudirektori atau kumpulan file, setiap tautan keras hanya dihitung satu kali.

Contoh:

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

Perilaku ini secara eksplisit diamanatkan oleh standar POSIX untuk duutilitas :

File yang muncul beberapa kali dalam satu operan file dan yang memiliki jumlah tautan lebih dari 1 harus dihitung dan ditulis hanya untuk satu entri.

Beberapa duimplementasi memiliki opsi non-standar untuk menonaktifkan perilaku ini. Untuk GNU du, ini dilakukan dengan -lopsi.

Kusalananda
sumber
3

Ini hampir pasti berfungsi dengan benar. dumenghitung setiap file hanya sekali terlepas dari berapa kali direferensikan. Kemungkinan dua direktori Anda berisi kumpulan file yang ditautkan dengan yang sama.

Halaman manual untuk GNU dumenawarkan -l, --count-linksuntuk mematikan optimasi standar ini (lihat man duuntuk memeriksa apakah implementasi Anda termasuk ini). Atau Anda menjalankan dudua kali, satu kali untuk setiap direktori.

roaima
sumber