Вопрос или проблема
rsync -rave "ssh -i ~/Desktop/mypemfile.pem" /users/myusername/dev/myproject/wp-content/uploads/* ubuntu@myinstance(измененное имя).compute.amazonaws.com:/var/www/html/production/wp-content/uploads --omit-dir-times
/var/www/html/production/wp-content/uploads/2018/02
содержит 50 дополнительных файлов, которые отсутствуют в /users/myusername/dev/myproject/wp-content/uploads/2018/02
Я хотел бы убедиться, что все файлы, существующие в моем экземпляре EC2 ниже ../wp-content/uploads/. (рекурсивно), попадают на мой локальный компьютер /users/……. /wp-content/uploads – я знаю, что могу использовать scp, но scp не делает инкрементальные копии….. мне нужна инкрементальная копия.
Почему файлы не копируются в /Users/....
?
rsync выдает следующее:
создание списка файлов ... готово
отправлено 678984 байт получено 20 байт 452669.33 байт/сек
общий размер 3691754591 ускорение 5437.01
но ничего не делает.
Команда rsync
использует такую же структуру, как cp
и mv
: источник идет перед получателем в командной строке:
rsync --flags... /source/path /destination/path
Таким образом, в вашем случае причина, по которой ничего не копируется в /users/
(обратите внимание, не /Users/
, как в вашем вопросе), заключается в том, что вы копируете из /users
на удаленную AWS-цель.
Если вы хотите скопировать из AWS на вашу локальную файловую систему, вам следует использовать команду, подобную этой (разделенная на три строки; обратите внимание, что завершающий \
указывает на продолжение на следующей строке):
rsync -avO -e "ssh -i ~/Desktop/mypemfile.pem" \
ubuntu@myinstance(измененное имя).compute.amazonaws.com:/var/www/html/production/wp-content/uploads/ \
/users/myusername/dev/myproject/wp-content/uploads/
Некоторые оптимизации: не используйте *
в списке источников (просто убедитесь, что путь заканчивается на /
), и -r
подразумевается через -a
.
Ответ или решение
Проблема, с которой вы столкнулись при использовании команды rsync
, заключается в неправильной интерпретации источника и назначения. Давайте разберем это детально.
1. Анализ команды rsync
Ваш исходный код выглядит следующим образом:
rsync -rave "ssh -i ~/Desktop/mypemfile.pem" /users/myusername/dev/myproject/wp-content/uploads/* ubuntu@myinstance(changed name).compute.amazonaws.com:/var/www/html/production/wp-content/uploads --omit-dir-times
Здесь вы на самом деле копируете файлы с локальной машины на удаленный сервер, а не наоборот, как вы предполагаете. Формат команды rsync
требует, чтобы источник (файлы и папки, которые мы хотим скопировать) находился перед назначением (адресом, куда мы копируем).
2. Ошибка в пути
В вашем случае вы указали путь /users/myusername/dev/myproject/wp-content/uploads/*
, который начинается с маленькой буквы "u". В большинстве случаев на UNIX-системах пути регистрозависимы, и это может привести к проблемам при поиске файлов. Убедитесь, что вы используете правильный путь, который на самом деле должен быть /Users/myusername/dev/myproject/wp-content/uploads/*
(с заглавной буквы "U").
3. Правильный синтаксис для копирования с сервера
Если ваша цель — скопировать файлы с удаленного сервера на локальную машину, то необходимо изменить порядок и структуру вашей команды. Правильный способ будет следующим:
rsync -avz -e "ssh -i ~/Desktop/mypemfile.pem" \
ubuntu@myinstance(changed name).compute.amazonaws.com:/var/www/html/production/wp-content/uploads/ \
/Users/myusername/dev/myproject/wp-content/uploads/
Объяснение ключей:
-a
: включает архивный режим, что обеспечивает рекурсивное копирование и сохранение метаданных файлов.-v
: включает подробный вывод, что позволяет видеть процесс копирования.-z
: сжимает данные во время передачи, что может значительно ускорить процесс при передаче больших объемов данных.
4. Оптимизация команды
- Избегайте использования
*
в источнике. Вместо этого убедитесь, что путь к папке заканчивается на/
, это позволитrsync
правильно обрабатывать содержимое директории. - Параметр
--omit-dir-times
не нужен в данном контексте, если вы не хотите учитывать изменения времени для директорий.
5. Заключение
Теперь, когда мы определили, как правильно настроить команду rsync
для копирования данных с удаленного сервера, вы сможете эффективно использовать её для миграции файлов. Убедитесь, что все пути указаны корректно и соответствуют регистру файловой системы, чтобы избежать дальнейших проблем. Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью.