Createing directories and moving files into it

I have an undetermined list of directories.

I am trying to loop through them all and in each one I want to make a
directory called 'images'. when i do this, I want o move all the imagges
in that folder into it.

so i have a tree like this:

some-dir
\_abc
- img00971273.jpg
- img21234235.jpg
- img12345623.jpg
\_123
- img99554361.jpg
- img21234235.jpg
- img53840534.jpg
\_xyz
- img00930443.jpg
- img12364235.jpg
- img09982623.jpg
\_890
- img00923871.jpg
- img21292835.jpg
- img08836823.jpg

I would like to create

some-dir
\_abc
\__images
   - img00971273.jpg
   - img21234235.jpg
   - img12345623.jpg

And so on and so forth.

Hope this illustration makes sense. I have tried to create a loop and go
through each directory and use system() to 'mkdir images' and mv *.jpg
/images

no luck as yet. really starting to like some of Ruby's fileutils. just
wish i could get moving with some of these tasks :slight_smile:

All help greatly appreciated. I'll buy you a beer at lunch.

···

--
Posted via http://www.ruby-forum.com/.

-------- Original-Nachricht --------

Datum: Wed, 29 Oct 2008 02:53:09 +0900
Von: Bee Tard <scappa@gmail.com>
An: ruby-talk@ruby-lang.org
Betreff: createing directories and moving files into it

I have an undetermined list of directories.

I am trying to loop through them all and in each one I want to make a
directory called 'images'. when i do this, I want o move all the imagges
in that folder into it.

so i have a tree like this:

some-dir
\_abc
- img00971273.jpg
- img21234235.jpg
- img12345623.jpg
\_123
- img99554361.jpg
- img21234235.jpg
- img53840534.jpg
\_xyz
- img00930443.jpg
- img12364235.jpg
- img09982623.jpg
\_890
- img00923871.jpg
- img21292835.jpg
- img08836823.jpg

I would like to create

some-dir
\_abc
\__images
   - img00971273.jpg
   - img21234235.jpg
   - img12345623.jpg

And so on and so forth.

Hope this illustration makes sense. I have tried to create a loop and go
through each directory and use system() to 'mkdir images' and mv *.jpg
/images

no luck as yet. really starting to like some of Ruby's fileutils. just
wish i could get moving with some of these tasks :slight_smile:

All help greatly appreciated. I'll buy you a beer at lunch.
--
Posted via http://www.ruby-forum.com/.

Hi ---

you can create a directory, if it doesn't yet exist, using fileutils:

irb(main):001:0> require "fileutils"
=> true
irb(main):002:0> FileUtils.mkdir_p "temp5"
=> "temp5"

If you do it again, that doesn't matter.
For moving files, I like the rio gem:

http://rio.rubyforge.org/

require "rubygems"
require "rio"

Iterate over the .rb files in a directory and its subdirectories.

rio('adir').all.files('*.rb') { |entrio|

   # do some checks on entrio.to_s to classify things

  if /\.jpg$/.match(entrio.to_s)
    p "it's an image
  end

}

Do also check that you have writing permissions on the directory you want to write to.

Best regards,

Axel

···

--
Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer

Axel Etzold wrote:

you can create a directory, if it doesn't yet exist, using fileutils:

irb(main):001:0> require "fileutils"
=> true
irb(main):002:0> FileUtils.mkdir_p "temp5"
=> "temp5"

If you do it again, that doesn't matter.
For moving files, I like the rio gem:

http://rio.rubyforge.org/

require "rubygems"
require "rio"

Iterate over the .rb files in a directory and its subdirectories.

rio('adir').all.files('*.rb') { |entrio|

   # do some checks on entrio.to_s to classify things

  if /\.jpg$/.match(entrio.to_s)
    p "it's an image
  end

}

Do also check that you have writing permissions on the directory you
want to write to.

I did it this way:

for I in *; do mkdir ${I}/myFolder; mv ${I}/* ${I}/myFolder; done

was wondering forever about a ruby way. thanks for the help.

···

--
Posted via http://www.ruby-forum.com/.

Using Rio's rename-mode:

require 'rio'

# This will work if the only images under 'some-dir' are
# as stated in the problem

rio('some-dir').rename.all.files('*.jpg') do |ifile|
  ifile.dirname = rio(ifile.dirname,'images').mkdir
end

# This is little more robust

rio('some-dir').dirs do |d|
  d.rename.files('*.jpg') do |ifile|
    ifile.dirname = rio(ifile.dirname,'images').mkdir
  end
end

···

On Oct 28, 1:40 pm, Axel Etzold <AEtz...@gmx.de> wrote:

-------- Original-Nachricht --------

> Datum: Wed, 29 Oct 2008 02:53:09 +0900
> Von: Bee Tard <sca...@gmail.com>
> An: ruby-t...@ruby-lang.org
> Betreff: createing directories and moving files into it
> I have an undetermined list of directories.

> I am trying to loop through them all and in each one I want to make a
> directory called 'images'. when i do this, I want o move all the imagges
> in that folder into it.

> so i have a tree like this:

> some-dir
> \_abc
> - img00971273.jpg
> - img21234235.jpg
> - img12345623.jpg
> \_123
> - img99554361.jpg
> - img21234235.jpg
> - img53840534.jpg
> \_xyz
> - img00930443.jpg
> - img12364235.jpg
> - img09982623.jpg
> \_890
> - img00923871.jpg
> - img21292835.jpg
> - img08836823.jpg

> I would like to create

> some-dir
> \_abc
> \__images
> - img00971273.jpg
> - img21234235.jpg
> - img12345623.jpg

> And so on and so forth.

> Hope this illustration makes sense. I have tried to create a loop and go
> through each directory and use system() to 'mkdir images' and mv *.jpg
> /images

> no luck as yet. really starting to like some of Ruby's fileutils. just
> wish i could get moving with some of these tasks :slight_smile:

> All help greatly appreciated. I'll buy you a beer at lunch.
> --
> Posted viahttp://www.ruby-forum.com/.

Hi ---

you can create a directory, if it doesn't yet exist, using fileutils:

irb(main):001:0> require "fileutils"
=> true
irb(main):002:0> FileUtils.mkdir_p "temp5"
=> "temp5"

If you do it again, that doesn't matter.
For moving files, I like the rio gem:

http://rio.rubyforge.org/

require "rubygems"
require "rio"

Iterate over the .rb files in a directory and its subdirectories.

rio('adir').all.files('*.rb') { |entrio|

# do some checks on entrio.to_s to classify things

if /\.jpg$/.match(entrio.to_s)
p "it's an image
end

}

Do also check that you have writing permissions on the directory you want to write to.

Best regards,

Axel
--
Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
Ideal für Modem und ISDN:http://www.gmx.net/de/go/smartsurfer

I did it this way:

for I in *; do mkdir ${I}/myFolder; mv ${I}/* ${I}/myFolder; done

was wondering forever about a ruby way. thanks for the help.

(in mac os terminal)

···

--
Posted via http://www.ruby-forum.com/.

# I did it this way:
# for I in *; do mkdir ${I}/myFolder; mv ${I}/* ${I}/myFolder; done

you can do that too

system "for I in *; do mkdir ${I}/myFolder; mv ${I}/* ${I}/myFolder; done"

i'm joking of course :wink:

that is fine if you have only folders/directory (ie no regular files) in your current dir, and your folders contain just images.

in a full-fledged language, your checking is flexible, and your code is portable. plus you get the power of ruby.

anyway, try eg,

<code>
require 'fileutils'
Dir.glob("tempf/*").select{|x| FileTest.directory?(x)}.each{|dir|
  dest_folder = File.join(dir,"images")
  srce_files = Dir.glob(File.join(dir,"*.jpg"))
  Dir.mkdir dest_folder
  FileUtils.mv srce_files, dest_folder
}
</code>

note, tempf is just my sample test folder to test the code above.

···

From: Bee Tard [mailto:scappa@gmail.com]