4

Я пытаюсь скопировать измененные файлы в Godaddy через SSH. Godaddy ужасен, и поэтому они, конечно, не позволяют rsync. Я могу использовать scp, но я действительно хочу копировать только измененные файлы. Я не думаю, что это возможно, поэтому мне было интересно, если бы я мог scp только все файлы php.

Однако существует много подкаталогов, поэтому мне нужно использовать опцию -r.

Есть ли способ, которым я могу использовать scp для рекурсивного копирования всех файлов с расширением php ? как это:

scp -r -name "*php" /local/html/ user@server:/home/html/ (не работает)

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ

//on local machine
$ find ./source

source/1.php
source/2.php
source/sub
source/sub/3.php
source/sub/4.php
source/sub/DONT-copy.txt
source/sub/DONT-copy.png
source/sub/sub2
source/sub/sub2/5.php
source/sub/sub2/6.php

//command to copy the files
$ [scp command here]

//on remote server
$ find ./destination

destination/1.php
destination/2.php
destination/sub
destination/sub/3.php
destination/sub/4.php
destination/sub/sub2
destination/sub/sub2/5.php
destination/sub/sub2/6.php

ЭТО НЕ РАБОТАЕТ

//on local machine
$ find ./source

source/1.php
source/2.php
source/sub
source/sub/3.php
source/sub/4.php
source/sub/DONT-copy.txt
source/sub/DONT-copy.png
source/sub/sub2
source/sub/sub2/5.php
source/sub/sub2/6.php

//command to copy the files
$ cd source; scp -r *.php user@remote:/destination 

//on remote server
$ find ./destination

destination/1.php
destination/2.php

Возможно, мы могли бы попытаться использовать find, но я уверен, что это не будет работать как есть:

find ./source -name "*.php" -exec scp {} user@remote:{} \;

Это не сработает, потому что я не думаю, что вы можете использовать несколько операторов {} в find.

Кроме того, может быть сложно получить пути для выравнивания на удаленном сервере, например, если find возвращает /users/johndoe/documents/source/1.php и вы хотите, чтобы он оказался в /home/jane/www/destination/1.php на удаленном сервере.

3 ответа3

2

вот что я делаю, когда хост-узел позволяет пихать, а не rsync:

  • создайте "теневой" каталог на вашем локальном компьютере, чтобы он был похож на целевую структуру
  • используйте rsync чтобы переместиться в этот теневой каталог, и перехватить вывод (есть --log-file если вы хотите написать его)
  • из вывода rsync определите файлы, которые нужно удалить, или нажмите и создайте список
  • Может быть (зависит от того, как вы нажимаете): создать пакет из файлов, которые нужно изменить только
  • запустите ваш push-инструмент - ftp, scp, что угодно - и дайте ему поработать с файлами из списка
0

Вы не можете сделать назначение scp -r *.php destination ?

-1

scp -r user @ ip:/data/files/*. php /tmp /files/

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