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명령의 다른 곳에서 계산되지 않기 때문에 응답에 문제가 있습니다. 작업 디렉토리에 하위 디렉토리가 두 개뿐입니까?
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문서 :

둘 이상의 하드 링크가 동일한 파일을 가리키는 경우 하드 링크 중 하나만 계산됩니다. 파일 인수 순서는 계산되는 링크에 영향을 미치며 인수 순서를 변경하면 출력되는 숫자와 항목이 변경 될 수 있습니다.

반복적 인 크기의 하드 링크가 실제로 필요한 경우 다음 -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.

이것은이 두 파일이 다른 곳의 다른 파일에 하드 링크되어 있다는 것을 의미합니다. 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에 대한 man 페이지 du이벤트 -l, --count-links(본 표준 최적화 오프 전환 man du구현이 포함 된 경우 확인을). 또는 du각 디렉토리마다 한 번씩 두 번 실행 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.