Как перемещать определенные файлы при сохранении их структуры каталогов

3

У меня есть большой каталог с большим количеством файлов и каталогов в удаленной системе 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
    
задан Dan 16.10.2013 в 12:59
источник

3 ответа

2

Интересная проблема. Я немного искал, так что вот еще один подход. Когда у вас есть список файлов и очень много файлов для загрузки. Используйте 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 -

Но будьте осторожны с экранированными символами оболочки в вашем списке.

    
ответ дан chaos 16.10.2013 в 14:52
источник
2

Почему вы не используете 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/
    
ответ дан chaos 16.10.2013 в 13:42
1

Это то, что я закончил, хотя, если есть лучший способ, добавьте в качестве ответа:

Я сохранил список файлов в файле 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

    
ответ дан Dan 16.10.2013 в 14:27