Поиск только в текущем каталоге

#ruby

#ruby

Вопрос:

Я использую

 Find.find("c:\test") 
  

для поиска файлов в каталоге. Я просто хочу выполнить поиск в каталоге на этом уровне, поэтому любой каталог внутри c:test поиск не выполняется.

Есть ли другой метод, который я могу использовать?

Спасибо

Ответ №1:

 # Temporarily make c:test your current directory
Dir.chdir('c:/test') do
  # Get a list of file names just in this directory as an array of strings
  Dir['*'].each do |filename|
    # ...
  end
end
  

В качестве альтернативы:

 # Get a list of paths like "c:/test/foo.txt"
Dir['c:/test/*'] do |absolute|
  # Get just the filename, e.g. "foo.txt"
  filename = File.basename(absolute)
  # ...
end
  

С помощью обоих вы можете получить только имена файлов в массив, если хотите:

 files = Dir.chdir('c:/text'){ Dir['*'] }
files = Dir['c:/text/*'].map{ |f| File.basename(f) }
  

Ответ №2:

Find prune метод позволяет пропустить текущий файл или каталог:

Пропускает текущий файл или каталог, перезапуская цикл со следующей записью. Если текущий файл является каталогом, этот каталог не будет вводиться рекурсивно. Значимый только в пределах блока, связанного с Find::find .

 Find.find("c:\test") do |path|
  if FileTest.directory?(path)
    Find.prune   # Don't look any further into this directory.
  else
    # path is not a directory, so must be file under c:\test
    # do something with file
  end
end
  

Ответ №3:

Вы можете использовать Dir.foreach() , например, для перечисления всех файлов в c:test

 Dir.foreach("c:\test")  {|x| puts "#{x}" }