
Я использую следующую команду для создания полной рекурсивной копии содержимого одного каталога в другой:
rsync -avzhe /path1/to1/dir1/* /path2/to2/dir2/
Работает так, как я и ожидал, за исключением того, что первый файл (в алфавитном порядке), будь то каталог или файл, не копируется. Все остальные файлы копируются. Почему?
Если это имеет значение, у меня MacOS 10.14.6.
решение1
Опции -e
нужен аргумент, поэтому для этого она берет первое имя файла. Я не уверен, зачем вам это нужно, -e
так как она задает команду для подключения к удаленному компьютеру, но вы не используете удаленный компьютер. Просто удалите -e
.
решение2
Чтобы сделать полную копию каталога /path1/to1/dir1
с именем /path2/to2/dir2
, используйте
rsync -av /path2/to1/dir1/ /path2/to2/dir2
Нет смысла использовать сжатие ( -z
) для локальной копии. -e
Параметр указывает команду, используемую для установления сетевого соединения (именно поэтому ваша команда не может скопировать первый файл; rsync
использует его как аргумент параметра для -e
параметра), поэтому его также следует удалить в этом сценарии.
Также не используйте *
в конце исходного пути, так как это обычно не будет соответствовать никаким скрытым именам. Подстановка всех имен ниже dir1
может также потенциально расширить список до слишком длинного для того, чтобы команда могла вообще выполниться.
Просто убедитесь, что исходный путь заканчивается косой чертой. Косая черта в конце целевого пути не имеет значения. Удаление косой черты из исходного пути скопирует dir1
внутрь dir2
. Косая черта в конце исходного пути создает dir2
копию dir1
.
Помимо этого, вы можете использовать его, -H
чтобы убедиться, что жесткие ссылки установлены правильно в месте назначения, а также --sparse
если вы знаете, что копируете файлы, которые могут быть разреженными (например, предварительно выделенные образы дисков).
Используйте --delete
такжеудалитьЗаписи из назначения, которое не является частью иерархии исходного файла. Используйте это с осторожностью. Вы можете сначала выполнить тестовый запуск с -n
( --dry-run
).