?

Log in

No account? Create an account

Как я перенёс фотоархив с работы домой - Здесь ничего не написано — ЖЖ

июн. 24, 2015

03:01 pm - Как я перенёс фотоархив с работы домой

Previous Entry Поделиться

В общем, несмотря на некоторые успехи, проблема переноса 65Гб фотоархива с работы домой так окончательного решения и не находила. GoodSync отказался работать после истечения триального периода, я только зря потратил время на изучение.

С некоторым усилием я развернул дома FTP-cервер, примечательно, что я использовал сервер, встроенный в Windows 7. С нетбука под Убунту на работе через офисный wifi я смог приконнектиться и даже скопировать файлик командой cp. Но мне надо было копировать много файлов и папок. Из рассмотренных программ:

- gFTP работает нормально, но спотыкается об уже существующие файлы и папки
- Double Commander неправильно отображает имена папок на удалённой стороне,и самое главное, после потери соединения не может переподключиться и его приходится перезапускать, а запускается он только из командной строки, в меню он не добавился.
- Midnight Commander вообще не работает, или я чего-то не понял. На вид полное убожество, разбираться желания не возникло.

В общем, я прикинул так и этак, и сам написал программку для копировния на Ruby. Собственно, это первый осмысленный код, что я написал на Руби. Программка умеет копировать файлы по FTP, перебирая вложенные папки и копируя их структуру. Уже существующие файлы и папки пропускаются (достаточно совпадения имени).

в файле copy_ftp_f.rb

require 'net/ftp'
class FTPConn < Net::FTP
def initialize
@ftpc=Net::FTP.new('xxx.xxx.xxx.xxx') #IP-адрес
@ftpc.login('username','password')
end
def ftpConn
@ftpc
end
def closeFtpConn
@ftpc.close
end
end

class CopyFTP
def initialize(pftp, pfrom, pto)
@s1,@s2=pfrom,pto
#puts '@s1='+@s1
#puts '@s2='+@s2
#puts '@s2(Basename)='+File.basename(@s2)
@ftp=pftp
end

def copyFolder
#puts @ftp.nlst()
@fi=@ftp.nlst()
if @fi.index(File.basename(@s2))
puts 'FTP: trying to enter directory '+@s2
fff=@ftp.chdir(File.basename(@s2))
puts 'Directory '+@s2+ ' exists.'
else
@ftp.mkdir(File.basename(@s2))
puts 'Directory '+@s2+ ' created.'
@ftp.chdir(File.basename(@s2))
end

@fi=@ftp.nlst()
#puts @fi
Dir.glob(@s1+'/*') do |x|
if File.file?(x)
print 'Copy file '+File.basename(x)+'...'
if not @fi.index(File.basename(x))
@ftp.putbinaryfile(x)
puts 'copied'
else
puts 'already exists!'
end
else
puts 'Entering directory '+x
z=CopyFTP.new(@ftp, @s1+'/'+File.basename(x), @s2+'/'+File.basename(x))
z.copyFolder
end
end
@ftp.chdir('..')
end
end


в файле copy_home.rb


require './copy_ftp_f.rb'
f=FTPConn.new
fc=f.ftpConn
p=CopyFTP.new(fc, ARGV[0],ARGV[1])
p.copyFolder
f.closeFtpConn


Для запуска из командной строки

ruby copy_home.rb /home/maximko/from_folder to_folder

Работает нормально.

Как я начинаю понимать, если под Линуксом хочешь пользоваться нормальным софтом - пиши его сам! Тут вам не винда, где всё просто работает с самого начала, тут вам свобода, то есть ничего готового нет и об любую задачу надо сломать себе мозг.

Tags:

Comments:

From:mindego
Date:Июнь 24, 2015 01:19 pm
(Link)
wget -m ftp://your.ftp.server не проще было бы?
Если есть аллергия на wget, можно какой-нибудь lftp или ncftp использовать.
Если не нравится командная строка,то можно и через gui в наутилусе просто ftp://your.ftp.server указать или использовать меню "подключиться к сервер".
(Ответить) (Thread)
[User Picture]
From:maximkoo
Date:Июнь 24, 2015 01:45 pm
(Link)
Через Наутилус коннектится, но показывает пустую папку.

wget -m - что он делает? Я не очень понял по справке. Если мне надо скопировать определённую папку, притом, что она уже может существовать на принимающей стороне и часть файлов в ней тоже, то как это надо написать?

Остальные программки выглядят сложнее, чем мне нужно.
(Ответить) (Parent) (Thread)
From:dek_in
Date:Январь 25, 2016 11:20 am
(Link)

Что-то совсем забросили журнал:)

(Ответить) (Thread)
[User Picture]
From:g_i_n_k_g_o
Date:Июнь 19, 2016 07:24 am
(Link)
Только что наткнулась на ваше сообщество про чешское кино, обрадовалась.
А потом расстроилась. Жалко, что забросили.
Небось, в ФБ перешли? )
(Ответить) (Thread)
[User Picture]
From:maximkoo
Date:Июнь 19, 2016 07:44 am
(Link)
Нет, я просто все забросил ) И сообщество, и ЖЖ и вообще бложики.
(Ответить) (Parent) (Thread)
[User Picture]
From:g_i_n_k_g_o
Date:Июнь 19, 2016 07:45 am
(Link)
Понимаю.
Что ж, удачи в реальной жизни!
Сообщество почитаю. )
(Ответить) (Parent) (Thread)
[User Picture]
From:pilgrim00
Date:Октябрь 9, 2016 12:16 pm
(Link)
в файле
(Ответить) (Thread)