I’m working on a consulting project where I need to scp only changed or new files to a remote server. With git-ls-files and rake, this is pretty easy:
edit Sun Apr 5 22:54:33 CDT 2009 — better still (threaded):
#!/usr/bin/env ruby
if ARGV.length < 1
puts "usage $0 <files>"
exit
end
threads = []
ARGV.each do |a|
threads << Thread.new(a) do |mya|
p = a.split('/')
pp = (p.size > 1) ? p.slice(0,(p.size-1)) : p
ex = "scp -r #{a} user@box:~/top_level_dir/#{pp.join('/')}"
puts ex
system ex
end
end
threads.each { |aThread| aThread.join }
edit Mon Mar 23 22:02:34 CDT 2009 — this one is better:
#!/usr/bin/env ruby
if ARGV.length < 1
puts "usage $0 <files>"
exit
end
ARGV.each do |a|
p = a.split('/')
pp = (p.size > 1) ? p.slice(0,(p.size-1)) : p
ex = "scp -r #{a} user@box:~/top_level_dir/#{pp.join('/')}"
system ex
end
The old (crappy) one:
task :default do
new = `git ls-files -m -o -x '*.swp'`
new.split.each do |file|
puts file
puts("cd /wwwdir; /usr/bin/scp -r \"#{file}\" user@box:/#{file}")
system("cd /wwwdir; /usr/bin/scp -r \"#{file}\" user@box:/#{file}")
end
end