Как улучшить команду 'rsync', чтобы создать все необходимые подкаталоги, если они еще не существуют? - PullRequest
1 голос
/ 15 сентября 2011

Я использую Ruby on Rails и гем Capistrano.Я хотел бы улучшить следующую команду, которая запускается по рецепту (меня вдохновила запись в блоге " Загрузка файлов для энки с использованием capistrano "):

rsync -qrpt --delete --rsh=ssh public/system/assets/users/001 #{user}@#{domain}:/www/.../shared/system/assets/001

, чтобы сделать возможнымсоздавать подкаталоги "на лету".В настоящее время, поскольку на удаленном компьютере каталог assets/users/001 еще не существует, я получаю следующую ошибку:

rsync: mkdir "/www/.../shared/system/assets/users/001" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(595) [Receiver=3.0.7]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-40/rsync/io.c(452) [sender=2.6.9]

Как создать все необходимые подкаталоги, чтобы избежать ошибок?

Кстати : что означает деталь -qrpt?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Попробуйте добавить опцию -R:

-R, --relative              use relative path names

за http://ubuntuforums.org/showthread.php?t=1670723

читать http://ss64.com/bash/rsync.html

-r, --recursive             recurse into directories
-p, --perms                 preserve permissions
-q, --quiet                 decrease verbosity
-t, --times                 preserve times
0 голосов
/ 15 сентября 2011

Не знаю, как вы это сделаете из Rsync, но вот решение Ruby.

Вызовите safe_create_path, указав желаемый путь до сценария rsync.

# Creates a path with all subdirectories in case any doesn't exist.
def safe_create_path(path_name)
  safe_create_helper(path_name)
end

def safe_create_helper(path_name)
  dir_name = File.dirname(path_name)
  if (!File.directory?(dir_name))
    safe_create_helper(path_name)
  end
  Dir.mkdir(path_name)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...