Я пытаюсь скопировать измененные файлы на 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/