У меня есть большой каталог с множеством файлов и каталогов в удаленной системе Windows, где у меня есть только доступ по FTP.
Мне пришлось внести некоторые изменения в некоторые файлы, поэтому я скачал весь каталог, чтобы рекурсивно выполнить команду находить и заменять файлы .
Используя Git локально, я смог получить список измененных файлов. (Это не Git в системе Windows, поэтому я не могу нажать / вытащить. Кроме того, у меня есть только FTP-доступ.)
Теперь мне нужно обновить файлы в системе Windows. Загрузка файла за файлом вручную может быть неприятной, так как есть много измененных файлов.
Некоторые файлы находятся в подкаталогах и подкаталогах.
Например, эта структура (Есть намного больше файлов):
./
|--- file1
|--- file2
|--- dir1
| |--- file1.1
| |--- dir1.1
| |---- file1.1.1
|--- dir2
|--- file2.1
|--- file2.2
|--- file2.3
Как я могу скопировать их (или даже переместить их нормально) в новое место, сохранив при этом их структуру каталогов. [ 114]
Таким образом, в моем FTP-клиенте я бы просто переместил всю папку. Он будет управлять структурой каталогов самостоятельно.
Имейте в виду, что в подкаталогах есть другие неизмененные файлы, которые я не хочу копировать.
Git дал мне этот список, так что он сделал половину работы:
file1
file2
dir1/file1.1
dir1/dir1.1/file1.1.1
dir2/file2.1
dir2/file2.2
dir2/file2.3
Почему Вы не используете curlftpfs
? Я думаю, что это было бы более просто что загрузка и загрузка целой структуры каталогов.
sudo apt-get install curlftpfs
Смонтируйте удаленную файловую систему ftp:
curlftpfs -v user:password@ftp-server.com/path/ /mnt/
Затем отредактируйте или измените то, что Вы имеете к и размонтировали фс. Но заметьте, файловая система является очень медленной.
Править: Если Ваш пароль имеет специальные символы как, используют названный файл ~/.netrc
со следующим форматом:
machine ftp-server.com
login user
password p@ssword
И смонтируйте фс через:
curlftpfs -v ftp-server.com/path/ /mnt/
Интересная проблема. Я искал немного, так что вот другой подход. Когда у вас есть список файлов и очень много файлов для загрузки. Используйте wput.
apt-get install wput
cat /you/large/file/list | wput ftp:/host/ -i -
Я бы порекомендовал включить подробный вывод с помощью -v
Со страницы man:
-i file
--input-file=file
Reads URLs and filenames from file. ...
Вы также можете использовать find
для передачи имен файлов в wput .
find | wput ftp://host/ -i -
Но позаботьтесь о экранированных символах в вашем списке.
Это то, что я в итоге сделал, хотя, если есть лучший способ, пожалуйста, добавьте в качестве ответа:
Я сохранил список файлов в файле foo.log
и запустил следующая команда:
tar -zcf bar.tar.gz --files-from foo.log
При архивировании с помощью tar
структура каталога остается неизменной при добавлении файлов.
Затем я разархивировал файл bar.tar.gz
в пустой каталог:
mkdir tempdir
tar -zcf bar.tar.gz -C tempdir
# Delete the archive
rm bar.tar.gz
Теперь все мои измененные файлы скопированы в tempdir