하나의 디렉토리에있는 모든 파일을 반복
루비로 루프를 작성하여 각 파일에서 코드 블록을 실행할 수 있습니까?
나는 루비를 처음 접했고 이것을 수행하는 방법은 각 루프를 수행하는 것이라고 결론을 내렸다.
루비 파일은 반복하려는 디렉토리와 다른 디렉토리에서 실행됩니다.
나는 그것을 시도했지만 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
'Programing' 카테고리의 다른 글
javac가 "확인되지 않거나 안전하지 않은 작업 사용"경고를 발생시키는 원인 (0) | 2020.03.29 |
---|---|
PDOException“드라이버를 찾을 수 없습니다” (0) | 2020.03.29 |
HTML 텍스트 필드에서 맞춤법 검사 사용 안함 (0) | 2020.03.29 |
jQuery : text ()와 html ()의 차이점은 무엇입니까? (0) | 2020.03.29 |
NSUserDefaults에 사용자 정의 객체를 저장하는 방법 (0) | 2020.03.29 |