scp только определенные файлы

scp только определенные файлы

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

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

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

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

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

//на локальной машине
$ найти ./источник

источник/1.php
источник/2.php
источник/подпись
источник/sub/3.php
источник/sub/4.php
источник/sub/НЕ-копировать.txt
источник/sub/НЕ-копировать.png
источник/под/под2
источник/sub/sub2/5.php
источник/sub/sub2/6.php

//команда для копирования файлов
$ [команда scp здесь]

//на удаленном сервере
$ найти ./назначение

пункт назначения/1.php
пункт назначения/2.php
пункт назначения/подпункт
назначение/sub/3.php
назначение/sub/4.php
пункт назначения/подпункт/подпункт2
назначение/sub/sub2/5.php
назначение/sub/sub2/6.php

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

//на локальной машине
$ найти ./источник

источник/1.php
источник/2.php
источник/подпись
источник/sub/3.php
источник/sub/4.php
источник/sub/НЕ-копировать.txt
источник/sub/НЕ-копировать.png
источник/под/под2
источник/sub/sub2/5.php
источник/sub/sub2/6.php

//команда для копирования файлов
$ cd source; scp -r *.php пользователь@удаленный:/место назначения

//на удаленном сервере
$ найти ./назначение

пункт назначения/1.php
пункт назначения/2.php

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

найти ./source -name "*.php" -exec scp {} пользователь@удаленный:{} \;

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

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

решение1

Вот что я делаю, когда хост разрешает только push-уведомления, а rsync нет:

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

решение2

Ты не можешь этого сделать scp -r *.php destination?

решение3

scp -r пользователь@ip:/data/files/*.php /tmp/files/

Связанный контент