rsync не копирует файлы, хотя должен.

Вопрос или проблема

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 для копирования данных с удаленного сервера, вы сможете эффективно использовать её для миграции файлов. Убедитесь, что все пути указаны корректно и соответствуют регистру файловой системы, чтобы избежать дальнейших проблем. Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...