Estou tentando copiar um diretório com um grande número de arquivos para outro destino. Eu fiz:
cp -r src_dir another_destination/
Então eu queria confirmar que o tamanho do diretório de destino é o mesmo que o original:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Pensei que houvesse vários links simbólicos que não fossem seguidos pelo cp
comando e adicionei a -a
flag:
-a Mesmo que as opções -pPR. Preserva a estrutura e os atributos dos arquivos, mas não a estrutura de diretórios.
cp -a src_dir another_destination/
mas du -s
me deu os mesmos resultados. É interessante que a origem e o destino tenham o mesmo número de arquivos e diretórios:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
O que estou fazendo de errado em obter tamanhos diferentes com o du
comando?
ATUALIZAR
Quando tento obter tamanhos de diretórios individuais com o du
comando, obtenho resultados diferentes:
du -s src_dir/sub_dir1
1112 src_dir/sub_dir1
du -s another_destination/src_dir/sub_dir1
1168 another_destination/src_dir/sub_dir1
Quando visualizo arquivos com ls -la
, os tamanhos de arquivos individuais são os mesmos, mas os totais são diferentes:
ls -la src_dir/sub_dir1
total 1168
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
ls -la another_destination/src_dir/sub_dir1
total 1112
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
fonte
ls -la
resultados. Veja UPDATEcp
são exatamente tão grandes quanto precisam.ls -ls
para ver quanto espaço em disco os arquivos estão usando.Respostas:
Isso ocorre porque,
du
por padrão, mostra não o tamanho do (s) arquivo (s), mas o espaço em disco que eles estão usando. Você precisa usar a-b
opção para obter a soma dos tamanhos dos arquivos, em vez do total do espaço em disco usado. Por exemplo:Mesmo que o arquivo tenha apenas 7 bytes de comprimento, ele ocupará um total de 4096 bytes de espaço em disco (no meu exemplo particular; variará dependendo do sistema de arquivos usado, do tamanho do cluster etc.).
Além disso, alguns sistemas de arquivos oferecem suporte aos chamados arquivos esparsos, que não usam espaço em disco para blocos que são todos zeros. Por exemplo:
Em resumo, para verificar se todos os arquivos foram copiados, você usaria em
du -sb
vez dedu -s
.fonte
du
saída: isso faria com que os arquivos compactados parecessem escassos para os programas que usam o algoritmo usual de comprimento! = used blocks. btrfs.wiki.kernel.org/index.php/…Pode ser devido ao tamanho do diretório "arquivos".
Na maioria dos sistemas de arquivos, em disco, um diretório é muito parecido com um arquivo comum (com apenas uma lista de nomes e números de nós, principalmente), usando mais blocos à medida que cresce.
Se você adicionar muitos arquivos, o próprio diretório aumentará. Mas se você os remover posteriormente, em muitos sistemas de arquivos, o diretório não diminuirá.
Portanto, se um dos diretórios da sua árvore original tiver muitos arquivos em algum momento, que foram posteriormente excluídos, a cópia desse diretório será "menor", pois usa apenas quantos blocos forem necessários para o número atual de arquivos.
Nas listagens da sua atualização, existem 3 diretórios que você não listou. Compare o tamanho desses (ou descendentes deles) em sua
ls -al
saída.Para descobrir onde está a diferença, tente um
ls -alr
nos dois diretórios, redirecionado para um arquivo e, em seguida, umadiff
das duas saídas.fonte
cp -a src_dir another_destination/
, é improvável, poisanother_destionation
seria recém-criado e, portanto, otimizado, enquantosrc_dir
(que pode ter alguns diretórios maiores de criações / adições anteriores) poderia realmente ser maior do que o necessário. No entanto, os resultados mostram quesrc_dir
é realmente menor (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. Na verdade, eles são arquivos, não diretórios. veja os nomes dos arquivos> if one of the directories in your original tree had many files at some point, which were later deleted
. Copiei o diretório de origem de um servidor remoto com o comando rsync e não excluí nada dele.
entradas mostram 5 links no inode. Um é o link do diretório pai para este. Outro é.
. Existem mais 3 links, que devem ser..
links de subdiretórios. A menos que esteja faltando algo muito estranho, deve haver três subdiretórios nesses. Você está dizendo que essas listagens são a saída completa?