Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #2394

Re: Pathname: moving files & directories

Path csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!news2.arglkargh.de!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Robert Klemme <shortcutter@googlemail.com>
Newsgroups comp.lang.ruby
Subject Re: Pathname: moving files & directories
Date Wed, 06 Apr 2011 21:07:39 +0200
Lines 69
Message-ID <903s05Flu0U1@mid.individual.net> (permalink)
References <b2265767440a64a48853a41cea71fe1a@ruby-forum.com>
Mime-Version 1.0
Content-Type text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding 7bit
X-Trace individual.net F/7BHLUHvkJMZmbp56bTpQJ4172sW9Fqvv8QicrWdELJF+sjw=
Cancel-Lock sha1:2OCW8fjf/3AE6IPAYO/wq5two4c=
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.15) Gecko/20110303 Lightning/1.0b2 Thunderbird/3.1.9
In-Reply-To <b2265767440a64a48853a41cea71fe1a@ruby-forum.com>
X-Antivirus avast! (VPS 110406-0, 06.04.2011), Outbound message
X-Antivirus-Status Clean
Xref x330-a1.tempe.blueboxinc.net comp.lang.ruby:2394

Show key headers only | View raw


On 06.04.2011 20:18, Simon Harrison wrote:
> This came up at work a while ago and our IT dept. said it was
> impossible. If we have the following paths:
>
> dir/customer1/file1
> dir/customer1/file2
> dir/customer1/lots more files
> dir/customer2/file1
> dir/customer2/file2
> dir/customer2/file3
> dir/customer2/obsolete/file1
> dir/customer2/oblolete/file2
> dir/customer3/file1
> dir/customer3/file2
> dir/customer3/obsolete/file1
>
> .etc
>
> how can we end up with this:
>
> /newdir/obsolete/customer2/file1
> /newdir/obsolete/customer2/file2
> /newdir/obsolete/customer3/file1
>
> .etc

Roughly something like this:

# untested

require 'pathname'
require 'fileutils'
require 'set'

base = Pathname('/newdir/obsolete')
old_dirs = Set.new

Pathname.glob('dir/*/obsolete/*').each do |pn|
   dir, file = pn.split
   customer = dir.parent.basename
   target_dir = base + customer
   target_dir.directoy? or target_dir.mkdir

   target = target_dir + file
   FileUtils.mv pn, target
   old_dirs << dir
end

old_dirs.each {|d| Dir.delete d}


> I can't really experiment at work because the IT folk would probably not
> be best pleased if I delete everything. I'm not sure what to use. I can
> get the paths easily with Dir.glob and then grep for 'obsolete'. But,
> I've no idea how to rename the paths. Any help appreciated.

Why can't you experiment at work?  You don't need to use real paths or 
you can omit the final move and delete operations.  You need to test 
your code anyway.  Can't you do it on your local machine or a virtual 
machine?

Kind regards

	robert


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Back to comp.lang.ruby | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Pathname: moving files & directories Simon Harrison <simon@simonharrison.net> - 2011-04-06 13:18 -0500
  Re: Pathname: moving files & directories Robert Klemme <shortcutter@googlemail.com> - 2011-04-06 21:07 +0200
  Re: Pathname: moving files & directories Jeremy Bopp <jeremy@bopp.net> - 2011-04-06 14:26 -0500
  Re: Pathname: moving files & directories Simon Harrison <simon@simonharrison.net> - 2011-04-06 15:09 -0500

csiph-web