Я вошел через ssh на server1, а на server1 я хочу получить файлы, расположенные в git-репозитории на server2, и сохранить их на server1, чтобы что-то с ними сделать (скрипт для сохранения в базе данных)

Git-репозиторий имеет довольно глубокую структуру. Я не могу просто клонировать хранилище, потому что мне не хватает места. Поэтому, конечно, я хочу пройтись по всем файлам на сервере Server2, и с каждым перемещать его на сервер server1, выполнить свою функцию для сохранения в базе данных, а затем удалить файл.

Часть, с которой у меня возникают проблемы, - это рекурсивный цикл загрузки файлов по ssh.

на редактирование: я общаюсь между двумя серверами redhat.

1 ответ1

0

Это не очень изящно, но, надеюсь, идея найдет:

ssh localhost -p4444 \
 "find ~/tmp/  -iname \*png -exec \
    sh -c 'echo mkdir -p moo-diles/\`dirname {}\`\;\
           rsync -e \"ssh -p 4444\" localhost:{} moo-files/{}\;\
           rm -i {}' \; "

(...)

mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/tile/veins_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/menu2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_2.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_up_3.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/bar_vertical_3.png
mkdir -p moo-diles//home/jaroslav/tmp/eterm/usr/share/Eterm/pix; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png moo-files//home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png; rm -i /home/jaroslav/tmp/eterm/usr/share/Eterm/pix/button_arrow_down_1.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track14.png moo-files//home/jaroslav/tmp/transcode/track14.png; rm -i /home/jaroslav/tmp/transcode/track14.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/closeup.png moo-files//home/jaroslav/tmp/transcode/closeup.png; rm -i /home/jaroslav/tmp/transcode/closeup.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track15.png moo-files//home/jaroslav/tmp/transcode/track15.png; rm -i /home/jaroslav/tmp/transcode/track15.png
mkdir -p moo-diles//home/jaroslav/tmp/transcode; rsync -e ssh -p 4444 localhost:/home/jaroslav/tmp/transcode/track10.png moo-files//home/jaroslav/tmp/transcode/track10.png; rm -i /home/jaroslav/tmp/transcode/track10.png

(...)

То, что здесь делается, можно назвать "метапрограммирование", потому что для каждого найденного файла мы просто отображаем больше команд для выполнения. Эти команды должны быть позже выполнены для обработки каждого файла. Вам будет целесообразно вместо этого поместить команды, которые входят в sh -c '<here>' в скрипт на сервере. Таким образом, вы избежите потери здравомыслия, пытаясь правильно избежать проблем и читая команду длиной в три строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .