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

./Lightroom_catalog_from_win_backupのduレポート4.0Kを作成するのはなぜですか。正しくレポートするにはどうすればよいですか?

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
リンクカウントが3のファイルはduコマンドの他の場所でカウントされないため、これは回答に問題があります。作業ディレクトリに2つのサブディレクトリしかないのですか?
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

これは予想される動作です。GNU duドキュメントから:

2つ以上のハードリンクが同じファイルを指す場合、ハードリンクの1つだけがカウントされます。ファイルの引数の順序は、どのリンクがカウントされるかに影響します。引数の順序を変更すると、出力される番号とエントリが変更される場合があります。

繰り返しサイズのハードリンクが本当に必要な場合は、次の-lオプションを試してください。

' -l'
' --count-links'
ファイルが既に(ハードリンクとして)表示されている場合でも、すべてのファイルのサイズをカウントします。

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

15

リンクカウントがされている様子がわかり3二つのファイルのためにLightroom 5 Catalog Linux.lrcatzbackup.batLightroom_catalog_from_win_backup

これは、これら2つのファイルがどこか他のファイル(の追加名)にハードリンクされていることを意味します。duディレクトリまたはファイルセットで実行する場合、各ハードリンクは1回だけカウントされます。

例:

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

この動作はduユーティリティのPOSIX標準によって明示的に義務付けられています

1つのファイルオペランドの下で複数回発生し、1を超えるリンクカウントを持つファイルは、1つのエントリに対してのみカウントされ、書き込まれます。

一部のdu実装には、この動作を無効にする非標準オプションがあります。GNUのdu場合、これは-lオプションで行われます。


3

それはほぼ確実に正しく動作しています。du参照回数に関係なく、各ファイルを1回だけカウントします。2つのディレクトリに同じハードリンクファイルのセットが含まれている可能性があります。

GNUのマニュアルページでdu-l--count-linksこの標準的な最適化を無効man duにすることができます(実装にこれが含まれているかどうかを確認するを参照してください)。またはdu、ディレクトリごとに1回ずつ、2回実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.