Programing

하나의 디렉토리에있는 모든 파일을 반복

lottogame 2020. 3. 29. 08:39
반응형

하나의 디렉토리에있는 모든 파일을 반복


루비로 루프를 작성하여 각 파일에서 코드 블록을 실행할 수 있습니까?

나는 루비를 처음 접했고 이것을 수행하는 방법은 각 루프를 수행하는 것이라고 결론을 내렸다.
루비 파일은 반복하려는 디렉토리와 다른 디렉토리에서 실행됩니다.

나는 그것을 시도했지만 Dir.foreach그것을 작동시킬 수 없었다.


다른 사람들이 말했듯 Dir.foreach이 여기에 좋은 옵션입니다. 그러나 노트는 것을 Dir.entries그리고 Dir.foreach항상 표시됩니다 ...(현재의 부모 디렉토리). 일반적으로 작업하고 싶지 않으므로 다음과 같이 할 수 있습니다.

Dir.foreach('/path/to/dir') do |item|
  next if item == '.' or item == '..'
  # do work on real items
end

Dir.foreach그리고 Dir.entries또한 디렉토리에있는 모든 항목을 표시 - 숨겨진 모두 숨겨. 종종 이것이 원하는 것이지만 그렇지 않은 경우 숨겨진 파일과 디렉토리를 건너 뛰기 위해 무언가를해야합니다.

또는 Dir.glob간단한 와일드 카드 일치를 제공하는 것을 살펴볼 수도 있습니다 .

Dir.glob('/path/to/dir/*.rb') do |rb_file|
  # do work on files ending in .rb in the desired directory
end

이것은 읽기 쉬운 가장 좋아하는 방법입니다.

Dir.glob("*/*.txt") do |my_text_file|
  puts "working on: #{my_text_file}..."
end

하위 디렉토리의 모든 파일에서 작동하도록 이것을 확장 할 수도 있습니다.

Dir.glob("**/*.txt") do |my_text_file| # note one extra "*"
  puts "working on: #{my_text_file}..."
end

Dir은 또한 디렉토리에서 모든 파일의 배열을 얻기 위해 더 짧은 구문을 가지고 있습니다.

Dir['dir/to/files/*'].each do |fname|
    # do something with fname
end

Dir.foreach("/home/mydir") do |fname|
  puts fname
end

찾기 라이브러리는이 작업을 위해 특별히 설계되었습니다 : https://ruby-doc.org/stdlib-2.5.1/libdoc/find/rdoc/Find.html

require 'find'
Find.find(path) do |file|
  # process
end

이것은 표준 루비 라이브러리이므로 사용 가능해야합니다.


나는 위에서 언급하지 않은이 것을 좋아합니다.

require 'pathname'

Pathname.new('/my/dir').children.each do |path|
    puts path
end

장점은 문자열 대신 Pathname 객체를 가져 와서 유용한 작업을 수행하고 더 많이 탐색 할 수 있다는 것입니다.


Dir.new('/my/dir').each do |name|
  ...
end

참고 URL : https://stackoverflow.com/questions/2512254/iterate-through-every-file-in-one-directory

반응형