Trying to identify directories

Trying to figure out why this doesn't put just the directory names.
There are directories in options[:source] and if I start an irb
session in that directory, pick a directory name like "docs", and do:
  File.directory?('docs')
it returns true.

Besides a brain, a clue. and a life, what am I missing?

Thanks!

Leam

···

###
Dir.entries(options[:source]).each {|node|
  if File.directory?(node)
    puts " node is: #{node}."
  end
}

# output, even though there are directories present:
  node is: ..
  node is: ...

# If I remove the "File.directory?() it puts all the files and directories.

You are missing the full path to the directory or Dir.chdir to the directory you call the script from

···

El 30/07/18 a las 08:46, leam hall escribió:

Trying to figure out why this doesn't put just the directory names.
There are directories in options[:source] and if I start an irb
session in that directory, pick a directory name like "docs", and do:
   File.directory?('docs')
it returns true.

Besides a brain, a clue. and a life, what am I missing?

--
Gonzalo Garramuño

Besides a brain, a clue. and a life, what am I missing?

Your problem almost certainly isn't with the code you show, which works fine, but rather, with what's in options[:source] .
I'm betting there's something in there (perhaps even something dumb, like a <CR>) that's not what you think it should be.
Or, possibly, it's an unfully qualified directory. But the code directly below is spot-on; no changes required. Instead, add a line as I did, and see what's going on.

Thanks!

Leam

###

puts "And here is what we think our PWD is: #{Dir.pwd} and our source directory: #{options[:source]}."
Dir.entries(options[:source]).each {|node|
   if File.directory?(node)
     puts " node is: #{node}."
   end
}

···

On 2018-07-30 07:46, leam hall wrote:

# output, even though there are directories present:
  node is: ..
  node is: ...

# If I remove the "File.directory?() it puts all the files and directories.

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk&gt;

Besides a brain, a clue. and a life, what am I missing?

Your problem almost certainly isn't with the code you show, which works
fine, but rather, with what's in options[:source] .
I'm betting there's something in there (perhaps even something dumb, like a
<CR>) that's not what you think it should be.
Or, possibly, it's an unfully qualified directory. But the code directly
below is spot-on; no changes required. Instead, add a line as I did, and see
what's going on.

Thanks, I'll give that a look The <CR> is likely the culprit.

In this case the command set options[:source] to the directory the
code was in, but used the explicit path "/home/me/lang/ruby".

···

On Mon, Jul 30, 2018 at 8:32 AM, Ken D'Ambrosio <ken@jots.org> wrote:

On 2018-07-30 07:46, leam hall wrote:

###

puts "And here is what we think our PWD is: #{Dir.pwd} and our source
directory: #{options[:source]}."
Dir.entries(options[:source]).each {|node|
  if File.directory?(node)
    puts " node is: #{node}."
  end
}

# output, even though there are directories present:
  node is: ..
  node is: ...

# If I remove the "File.directory?() it puts all the files and
directories.

And this was it. I need to spend some time figuring out how to handle
this with recursion, but it's the root cause.

Thanks!

Leam

···

On Mon, Jul 30, 2018 at 8:26 AM, Gonzalo Garramuño <ggarra13@gmail.com> wrote:

You are missing the full path to the directory or Dir.chdir to the directory
you call the script from

--
Gonzalo Garramuño

Updated, and full code. Still working on the final product, but this is a big step forward. I'm learning to use Ruby on files and file-systems. This task is to find all the '.git' directories so I can grab the repository URLs and clone them into a new directory.

Leam

···

On 07/30/2018 06:39 PM, leam hall wrote:

On Mon, Jul 30, 2018 at 8:26 AM, Gonzalo Garramuño <ggarra13@gmail.com> wrote:

You are missing the full path to the directory or Dir.chdir to the directory
you call the script from

And this was it. I need to spend some time figuring out how to handle
this with recursion, but it's the root cause.

####

# ruby source_dest_dir -s /home/me/lang/git

require 'optparse'
git_dirs =
options = Hash.new{}

option_parser = OptionParser.new {|opts|
   opts.on('-s DIR', '--source', "Source") {|s|
     options[:source] = s
   }
   opts.on('-d DIR', '--dest', "Destination") {|d|
     options[:dest] = d
   }
}
option_parser.parse!

begin
   options[:dest] = Dir.pwd unless options.has_key?(:dest)
   options[:source] = Dir.pwd unless options.has_key?(:source)
   raise "Cannot read #{options[:source]}." unless File.readable?(options[:source])
   raise "Can't write to #{options[:dest]}." unless File.writable?(options[:dest])
rescue RuntimeError => e
   puts "Access failure: #{e}."
end

def walk_dir(dir, git_dirs)
   tree_dirs = ['.', '..']
   Dir.entries(dir).each {|node|
     next if tree_dirs.include?(node)
     node_ref = "#{dir}" + '/' + node
     next unless File.executable?(node_ref)
     if File.directory?(node_ref) and File.readable?(node_ref)
       if node == '.git'
         git_dirs << node_ref
       else
         walk_dir(node_ref, git_dirs)
       end
     end
   }
end

walk_dir(options[:source], git_dirs)
puts git_dirs

Hi,

This
task is to find all the '.git' directories so I can grab the repository

URLs

and clone them into a new directory.

You can search all .git files in a directory and subdirectories like

irb

dir = '.'

=> "."

git_dirs = Dir["#{dir}/**/.git"]

=> ["./database/projectdb/.git", ...

Regards,
Toshihiko Ichida

···

2018-07-31 9:57 GMT+09:00 Leam Hall <leamhall@gmail.com>: