one-liner for lowercasing files

P

Peter Bailey

Hi,
Can someone please suggest a simple Ruby one-liner to lowercase a
filename (in a directory)? I've perused, with Google, a bunch of good
Ruby one-liner sites, but, I can't find any lowercasing examples.

Thanks a lot,
Peter
 
B

Brian Candler

Peter said:
Can someone please suggest a simple Ruby one-liner to lowercase a
filename (in a directory)?

Lowercase the *contents* of a file, or its *name* ?

For the contents, this example lifted almost verbatim from "man ruby".

ruby -p -i.bak -e '$_.downcase!' /tmp/junk

To lowercase the names of all files:

Dir["*"].each { |fn| File.rename(fn, fn.downcase) }

Beware that even ruby 1.9 won't lowercase anything other than plain A-Z.
 
P

Peter Bailey

Thanks, Brian. Yes, it's just filename I want, not content. But, this is
what I get when I try your suggestion:
ruby Dir.glob("*").each { |fn| File.rename(fn, fn.downcase) }
'file' is not recognized as an internal or external command,
operable program or batch file.




Brian said:
Peter said:
Can someone please suggest a simple Ruby one-liner to lowercase a
filename (in a directory)?

Lowercase the *contents* of a file, or its *name* ?

For the contents, this example lifted almost verbatim from "man ruby".

ruby -p -i.bak -e '$_.downcase!' /tmp/junk

To lowercase the names of all files:

Dir["*"].each { |fn| File.rename(fn, fn.downcase) }

Beware that even ruby 1.9 won't lowercase anything other than plain A-Z.
 
F

Florian Gilcher

Thanks, Brian. Yes, it's just filename I want, not content. But,
this is
what I get when I try your suggestion:

'file' is not recognized as an internal or external command,
operable program or batch file.

Try

ruby -e 'Dir.glob("*").each { |fn| File.rename(fn, fn.downcase) }'

Otherwise, Dir.glob... will be seen as a shell command, not as ruby
code.

Regards,
Florian
 
P

Peter Bailey

Still no good. Here's what I get:
ruby -e 'Dir.glob("*.*").each { |fn| File.rename(fn, fn.downcase) }'
'fn' is not recognized as an internal or external command,
operable program or batch file.

E:\Asura-Non\BWDhelp\temp>
 
W

w_a_x_man

Still no good. Here's what I get:


'fn' is not recognized as an internal or external command,
operable program or batch file.

E:\Asura-Non\BWDhelp\temp>

Do not top-post.

Since you are using the windoze shell, you must learn some things
about the windoze shell. Does that make sense?

In this case, the Ruby code must be enclosed in double quotes.
Try this.

ruby -e "Dir['*'].each{|fn| p fn.downcase }"
 
P

Peter Bailey

w_a_x_man said:
Still no good. Here's what I get:


'fn' is not recognized as an internal or external command,
operable program or batch file.

E:\Asura-Non\BWDhelp\temp>

Do not top-post.

Since you are using the windoze shell, you must learn some things
about the windoze shell. Does that make sense?

In this case, the Ruby code must be enclosed in double quotes.
Try this.

ruby -e "Dir['*'].each{|fn| p fn.downcase }"

Here's what worked. Yours worked, waxman, but I needed a real filename
conversion, not just a print of it.
Thank you all for your help! This is great, simple stuff.
 
R

Robert Klemme

2009/12/14 Peter Bailey said:
w_a_x_man said:
Still no good. Here's what I get:

ruby -e 'Dir.glob("*.*").each { |fn| File.rename(fn, fn.downcase) }'

'fn' is not recognized as an internal or external command,
operable program or batch file.

E:\Asura-Non\BWDhelp\temp>

Do not top-post.

Since you are using the windoze shell, you must learn some things
about the windoze shell. =C2=A0Does that make sense?

In this case, the Ruby code must be enclosed in double quotes.
Try this.

ruby -e "Dir['*'].each{|fn| p fn.downcase }"

Here's what worked. Yours worked, waxman, but I needed a real filename
conversion, not just a print of it.
Thank you all for your help! This is great, simple stuff.
ruby -e "Dir.glob('*').each{|fn| File.rename(fn, fn.downcase) }"

Note that if you use a directory name in Dir['*'] you need to make
sure the dirname remains unchanged. Then you might rather do

ruby -e 'Dir["path/*"].each {|f| d, p =3D File.split(f); File.rename(f,
File.join(d, p.downcase))}'

Kind regards

robert


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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,163
Messages
2,570,897
Members
47,434
Latest member
TobiasLoan

Latest Threads

Top