Createing directories and moving files into it


#1

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.


#2

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

Datum: Wed, 29 Oct 2008 02:53:09 +0900
Von: Bee T. removed_email_address@domain.invalid
An: removed_email_address@domain.invalid
Betreff: createing directories and moving files into it

  • img00971273.jpg
    _890
    • img00971273.jpg
      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


#3

Axel E. 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.


#4

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)


#5

From: Bee T. [mailto:removed_email_address@domain.invalid]

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,

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 }

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


#6

On Oct 28, 1:40 pm, Axel E. removed_email_address@domain.invalid wrote:

I am trying to loop through them all and in each one I want to make a
_123

  • img08836823.jpg
    And so on and so forth.
    Posted viahttp://www.ruby-forum.com/.
    If you do it again, that doesn’t matter.

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

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