У меня есть большой каталог с большим количеством файлов и каталогов в удаленной системе Windows, где у меня есть только FTP-доступ.
Мне нужно было внести некоторые изменения в некоторые файлы, поэтому я загрузил весь каталог для запуска команды поиска и замены в файлах рекурсивно.
Используя Git локально, я смог получить список измененных файлов. (Их нет Git в системе Windows, поэтому я не могу нажать / вытянуть. Кроме того, у меня есть только FTP-доступ.)
Теперь мне нужно обновить файлы в системе Windows. Загрузка файла вручную может быть разочаровывающим, так как есть много измененных файлов. Некоторые из файлов находятся в подкаталогах и под-подкаталогах.
Например, эта структура (Есть намного больше файлов):
./
|--- file1
|--- file2
|--- dir1
| |--- file1.1
| |--- dir1.1
| |---- file1.1.1
|--- dir2
|--- file2.1
|--- file2.2
|--- file2.3
Как я могу их скопировать (или перемещение их даже отлично) в новое место, сохраняя при этом их структуру каталогов. Таким образом, в моем FTP-клиенте я бы просто переместил всю папку. Он будет управлять структурой каталогов сам по себе.
Имейте в виду, что в подкаталогах есть другие немодифицированные файлы, которые я не хочу копировать.
Гит дал мне это список, поэтому он сделал половину работы:
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/
Затем отредактировать или изменить все, что вам нужно, и отключите fs. Но обратите внимание, что файловая система очень медленная.
Изменить: если ваш пароль имеет специальные символы, такие как «@», используйте файл с именем ~/.netrc со следующим форматом:
machine ftp-server.com
login user
password p@ssword
И установите fs через:
curlftpfs -v ftp-server.com/path/ /mnt/
Это то, что я закончил делать, хотя, если есть лучший способ, добавьте в качестве ответа:
Я сохранил список файлов в файле 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