du relata incorretamente o diretório vazio

13

Eu estou usando estes comandos:

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

ambos os relatórios:

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

enquanto esses diretórios contêm:

$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

Por que os durelatórios estão disponíveis 4.0Kpara ./Lightroom_catalog_from_win_backup e como eu posso fazer isso corretamente?

PS: outras informações do sistema:

$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
fonte
Para aproveitar as respostas já dadas até agora, o que /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'retorna?
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
Isso apresenta um problema com as respostas, pois o arquivo com a contagem de links de três não está sendo contado em nenhuma outra parte do ducomando. Então você tem apenas dois subdiretórios no seu diretório de trabalho?
precisa saber é o seguinte
não, tenho aproximadamente 15 outras pessoas
adrhc

Respostas:

23

Posso reproduzir se os arquivos são links físicos:

~ 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

Esse é o comportamento esperado. Nos documentos do GNUdu :

Se dois ou mais links físicos apontam para o mesmo arquivo, apenas um deles é contado. A ordem dos argumentos do arquivo afeta quais links são contados e a alteração da ordem dos argumentos pode alterar os números e entradas que são gerados.

Se você realmente precisa de tamanhos repetidos de links físicos, tente a -lopção:

' -l'
' --count-links'
Conte o tamanho de todos os arquivos, mesmo que eles já tenham sido exibidos (como um link físico).

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

Observe como é a contagem de links 3para os dois arquivos Lightroom 5 Catalog Linux.lrcate zbackup.batentre Lightroom_catalog_from_win_backup.

Isso significa que esses dois arquivos estão fortemente vinculados a (nomes adicionais para) outros arquivos em algum lugar. Quando você executa duem um diretório ou conjunto de arquivos, cada link físico é contado apenas uma vez.

Exemplo:

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

Esse comportamento é explicitamente determinado pelo padrão POSIX para o duutilitário :

Um arquivo que ocorre várias vezes em um operando de arquivo e que possui uma contagem de links maior que 1 deve ser contado e gravado para apenas uma entrada.

Algumas duimplementações têm opções não padrão para desativar esse comportamento. Para o GNU du, isso é feito com a -lopção

Kusalananda
fonte
3

Está quase certamente funcionando corretamente. duconta cada arquivo apenas uma vez, independentemente de quantas vezes ele é referenciado. É provável que seus dois diretórios contenham o mesmo conjunto de arquivos vinculados.

A página de manual do GNU duoferece -l, --count-linkspara desativar essa otimização padrão (veja man dupara verificar se sua implementação inclui isso). Ou você executa duduas vezes, uma vez para cada diretório.

roaima
fonte