Я пытаюсь скопировать один каталог с большим количеством файлов в другое место назначения. Я сделал:
cp -r src_dir another_destination/
Затем я хотел подтвердить, что размер каталога назначения совпадает с исходным:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Тогда я подумал, что может быть несколько символических ссылок, за которыми не следует cp
командой и добавил -a
флаг:
-a То же, что и параметры -pPR. Пресервы структуры и атрибуты файлов, но не структура каталогов.
cp -a src_dir another_destination/
но du -s
дал мне те же результаты. Интересно, что и источник, и пункт назначения имеют одинаковое количество файлов и каталогов:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
Что я делаю неправильно , что я получаю различные размеры с du
командой?
ОБНОВИТЬ
Когда я пытаюсь получить размеры отдельных каталогов с помощью du
команды, я получаю разные результаты:
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
Когда я просматриваю файлы с ls -la
, отдельные размеры файлов одинаковы, но итоги разные:
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
источник
ls -la
результатами. Смотрите ОБНОВЛЕНИЕcp
имеют настолько большой размер, насколько это необходимо.ls -ls
чтобы увидеть, сколько дискового пространства используют файлы.Ответы:
Это связано с тем, что
du
по умолчанию отображается не размер файла (ов), а дисковое пространство, которое они используют. Вы должны использовать-b
опцию , чтобы получить сумму размеров файлов, а всего дискового пространства , используемого. Например:Даже если файл имеет длину всего 7 байт, она будет занимать целых 4096 байт дискового пространства (в моем конкретном примере, она будет варьироваться в зависимости от файловой системы, используемой, размером кластера и т.д.).
Кроме того, некоторые файловые системы поддерживают так называемые разреженные файлы, которые не используют дисковое пространство для блоков, которые являются нулями. Например:
Короче говоря, чтобы проверить все файлы были скопированы, вы бы использовать
du -sb
вместоdu -s
.источник
du
вывод: из-за этого сжатые файлы выглядят разреженными для программ, использующих обычный алгоритм длины! = используемые блоки. btrfs.wiki.kernel.org/index.php/…Это может быть связано с размером каталога «файлы».
В большинстве файловых систем на диске каталог очень похож на обычный файл (в основном это просто список имен и номеров узлов), использующий больше блоков по мере роста.
Если вы добавляете много файлов, сам каталог увеличивается. Но если вы удалите их после этого, во многих файловых системах, каталог не будет сокращаться.
Таким образом, если в какой-то момент в одном из каталогов в вашем исходном дереве было много файлов, которые впоследствии были удалены, копия этого каталога будет «меньше», поскольку она использует столько блоков, сколько необходимо для текущего количества файлов.
В листингах в вашем обновлении, есть 3 директории вы не перечислены. Сравните размер тех (или потомки тех) в вашем
ls -al
выходе.Чтобы найти разницу, вы можете попробовать
ls -alr
оба каталога, перенаправленные в файл, а затем одинdiff
из двух выходных данных.источник
cp -a src_dir another_destination/
это маловероятно, так какanother_destionation
будет вновь созданный и оптимизируя , таким образом, в то время какsrc_dir
(что , возможно, имели некоторые большие каталоги из прошлых создания / дополнений) действительно может быть больше , чем нужно. Однако результаты показывают, чтоsrc_dir
на самом деле меньше (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
, На самом деле они представляют собой файлы, а не каталоги. увидеть имена файлов> if one of the directories in your original tree had many files at some point, which were later deleted
. Я скопировал исходный каталог с удаленного сервера с Rsync команды и не сделал ничего удалять из него.
записи показывают 5 ссылок на индексный дескриптор. Одним из них является ссылка из родительского каталога в этом. Другой есть.
. Есть еще 3 ссылки, которые должны быть..
ссылки из подкаталогов. Если я что - то очень странное отсутствует, должно быть 3 подкаталоги в тех. Вы говорите , что эти списки полный выход?