[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Find.find and files in cwd

Brad Tilley

3/21/2006 7:14:00 PM

I can use Find.find(Pathname.getwd) to get an array of all file paths
recursively, but how do I get only the files in the cwd (do not recurse
into sub-directories)?

Thank you,
Brad
13 Answers

Anthony DeRobertis

3/21/2006 7:24:00 PM

0

James Gray

3/21/2006 7:24:00 PM

0

On Mar 21, 2006, at 1:18 PM, rtilley wrote:

> I can use Find.find(Pathname.getwd) to get an array of all file
> paths recursively, but how do I get only the files in the cwd (do
> not recurse into sub-directories)?

Try:

Dir["#{Dir.getwd}/*"]

Hope that helps.

James Edward Gray II


Chris Hulan

3/21/2006 7:25:00 PM

0

rtilley wrote:
> I can use Find.find(Pathname.getwd) to get an array of all file paths
> recursively, but how do I get only the files in the cwd (do not recurse
> into sub-directories)?

Check out Dir (http://ruby-doc.org/core/classe...)

Dir.pwd #=> current directory
Dir['*'] #=> contents of current directory (files and directories)

Cheers

Pete

3/21/2006 7:43:00 PM

0

wow!

> --- Ursprüngliche Nachricht ---
> Von: James Edward Gray II <james@grayproductions.net>
> An: ruby-talk@ruby-lang.org (ruby-talk ML)
> Betreff: Re: Find.find and files in cwd
> Datum: Wed, 22 Mar 2006 04:24:29 +0900
>
> On Mar 21, 2006, at 1:18 PM, rtilley wrote:
>
> > I can use Find.find(Pathname.getwd) to get an array of all file
> > paths recursively, but how do I get only the files in the cwd (do
> > not recurse into sub-directories)?
>
> Try:
>
> Dir["#{Dir.getwd}/*"]
>
> Hope that helps.
>
> James Edward Gray II
>


dishmael

3/21/2006 7:50:00 PM

0

Nice!

-----Original Message-----
From: James Edward Gray II [mailto:james@grayproductions.net]
Sent: Tuesday, March 21, 2006 2:24 PM
To: ruby-talk ML
Subject: Re: Find.find and files in cwd

On Mar 21, 2006, at 1:18 PM, rtilley wrote:

> I can use Find.find(Pathname.getwd) to get an array of all file
> paths recursively, but how do I get only the files in the cwd (do
> not recurse into sub-directories)?

Try:

Dir["#{Dir.getwd}/*"]

Hope that helps.

James Edward Gray II



Brad Tilley

3/21/2006 8:15:00 PM

0

James Edward Gray II wrote:
> On Mar 21, 2006, at 1:18 PM, rtilley wrote:
>
>> I can use Find.find(Pathname.getwd) to get an array of all file paths
>> recursively, but how do I get only the files in the cwd (do not
>> recurse into sub-directories)?
>
>
> Try:
>
> Dir["#{Dir.getwd}/*"]

Yes, that helps... thank you. Perhaps I'm using it wrong though. When
trying to extract files with File.file? or links with File.link? like this:

Dir["#{Dir.getwd}/*"].each do |path|
if File.file?(path)
puts path
end
end

I get the whole directory listing (files, links, folders, etc.)

Zach Dennis

3/21/2006 8:53:00 PM

0

rtilley wrote:
> James Edward Gray II wrote:
>
>> On Mar 21, 2006, at 1:18 PM, rtilley wrote:
>>
>>> I can use Find.find(Pathname.getwd) to get an array of all file
>>> paths recursively, but how do I get only the files in the cwd (do
>>> not recurse into sub-directories)?
>>
>>
>>
>> Try:
>>
>> Dir["#{Dir.getwd}/*"]
>
>
> Yes, that helps... thank you. Perhaps I'm using it wrong though. When
> trying to extract files with File.file? or links with File.link? like this:
>
> Dir["#{Dir.getwd}/*"].each do |path|
> if File.file?(path)
> puts path
> end
> end
>
> I get the whole directory listing (files, links, folders, etc.)
>

To get only normal files try:
Dir["*"].delete_if{ |e| not File.file?( e ) }

To get only directories try:
Dir["*"].delete_if{ |e| not File.directory?( e ) }

To get only links try:
Dir["*"].delete_if{ |e| not File.link?( e ) }

Zach


Brad Tilley

3/21/2006 9:36:00 PM

0

zdennis wrote:

> To get only normal files try:
> Dir["*"].delete_if{ |e| not File.file?( e ) }
>
> To get only directories try:
> Dir["*"].delete_if{ |e| not File.directory?( e ) }
>
> To get only links try:
> Dir["*"].delete_if{ |e| not File.link?( e ) }
>
> Zach

The whole thing seems a bit hackish to me and it still leaves links to
files and links to folders on my Windows test machine.

I like this:
contents = Dir.entries(Pathname.getwd)

Better than this:
contents = Dir["#{Dir.getwd}/*"]

It makes more sense to me and seems more readable.

I wish that with either approach File.file? would work like this:

Dir.entries(Pathname.getwd).each do |entry|
if File.file?(entry)
puts entry
end
end

Logan Capaldo

3/21/2006 10:51:00 PM

0


On Mar 21, 2006, at 4:38 PM, rtilley wrote:

> zdennis wrote:
>
>> To get only normal files try:
>> Dir["*"].delete_if{ |e| not File.file?( e ) }
>> To get only directories try:
>> Dir["*"].delete_if{ |e| not File.directory?( e ) }
>> To get only links try:
>> Dir["*"].delete_if{ |e| not File.link?( e ) }
>> Zach
>
> The whole thing seems a bit hackish to me and it still leaves links
> to files and links to folders on my Windows test machine.
>
> I like this:
> contents = Dir.entries(Pathname.getwd)
>
> Better than this:
> contents = Dir["#{Dir.getwd}/*"]
>
> It makes more sense to me and seems more readable.
>
> I wish that with either approach File.file? would work like this:
>
> Dir.entries(Pathname.getwd).each do |entry|
> if File.file?(entry)
> puts entry
> end
> end
>

Why not:
Dir.entries(Dir.pwd).each do |entry|
unless File.directory?(entry)
puts entry
end
end

Or Dir.entries(Dir.pwd).reject { |entry| File.directory?(entry) }






Zach Dennis

3/22/2006 12:15:00 AM

0

rtilley wrote:
> zdennis wrote:
>
>> To get only normal files try:
>> Dir["*"].delete_if{ |e| not File.file?( e ) }
>>
>> To get only directories try:
>> Dir["*"].delete_if{ |e| not File.directory?( e ) }
>>
>> To get only links try:
>> Dir["*"].delete_if{ |e| not File.link?( e ) }
>>
>> Zach
>
>
> The whole thing seems a bit hackish to me and it still leaves links to
> files and links to folders on my Windows test machine.
>
> I like this:
> contents = Dir.entries(Pathname.getwd)
>
> Better than this:
> contents = Dir["#{Dir.getwd}/*"]
>
> It makes more sense to me and seems more readable.
>
> I wish that with either approach File.file? would work like this:
>
> Dir.entries(Pathname.getwd).each do |entry|
> if File.file?(entry)
> puts entry
> end
> end
>

Working with file globs is *not* hackish in my opinion. File globs are a powerful and wonderful thing. See Dir#glob for more
information.

Granted reject is better use then delete_if in this scenario. I like Logan's last solution, although to tidy it up:
Dir.entries( Dir.pwd ).reject{ |f| File.directory?( f ) }

Zach