От man rsync
--delete Это указывает rsync на удаление лишних файлов с принимающей стороны (те, которых нет на стороне отправки), но только для каталогов, которые синхронизируются. Вы, должно быть, попросили rsync отправить весь каталог (например, "dir" или "dir/") без использования подстановочного знака для содержимого каталога (например, "dir/*"). поскольку подстановочный знак расширяется оболочкой, и rsync, таким образом, получает запрос на передачу отдельных файлов, а не их родительского каталог. Файлы, которые исключены из передачи, также также исключаются из удаления, если вы не используете опцию --delete-excluded или пометить правила как соответствующие только передающей стороне (см. модификаторы include/exclude в разделе FILTER RULES).
Поэтому я думаю, что это должно быть
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete \
$(OUTPUTDIR)/ \
$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) \
--cvs-exclude --exclude=/.well-known
(предполагая, что .well-known
находится в корне $(SSH_TARGET_DIR)/
)
Вообще-то, ls
сообщает все, что говорит ему ядро: оно не делает ничего разного относительно размера в зависимости от того, является ли файл каталогом). А Linux сообщает логический размер. Но логический размер каталога - не очень интересное свойство: он зависит от формата файловой системы.
Тип файловой системы по умолчанию в большинстве дистрибутивов Linux - ext4, и, вероятно, именно его вы используете. Ext4 выделяет целые блоки под каталоги и управляет пространством внутри этих блоков по своему усмотрению. Он даже не освобождает блоки, если каталог уменьшается (dir1
будет иметь 9 блоков, даже если вы удалите все файлы в нем). На вопрос о размере файла, который является каталогом, ext4 возвращает размер, выделенный для каталога, а это всегда целое число блоков.
Различные типы файловых систем ведут себя по-разному. Например, в Btrfs, экспериментально, размер каталога может быть любым кратным 2.
Это особенность файловых систем ext2
/ ext3
/ ext4
, они сообщают размер каталогов в полных блоках. Если вы попробуете то же самое с XFS, вы увидите более мелкий размер.
На самом деле это не имеет значения. Для файлов важен «логический» размер, поскольку приложение может зависеть от знания размера файла вплоть до байта: конечный мусор может иметь значение, или некоторая структура данных может быть размещена в позиции относительно конца файл (например, архивы .zip).
Для каталогов «логический» размер не имеет значения, поскольку внутренняя структура хорошо известна, а в Linux программа пользовательского пространства не может даже напрямую читать содержимое каталога. Вместо этого чтение должно проходить через системные вызовы, сделанные специально для этой цели. И эти системные вызовы будут иметь дело с внутренней структурой каталога.