Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby에서 디렉토리로 작업하는 방법

Ruby로 파일 시스템을 탐색할 수 있다는 사실을 알고 계셨습니까?

Ruby "Dir" 클래스와 함께.

디렉토리 항목을 나열하고 현재 디렉토리를 변경하며 새 폴더를 만들 수도 있습니다!

예시 :

filenames = Dir.entries(".")

entries 메서드는 파일 이름 항목의 배열을 반환합니다. 모든 항목은 문자열이므로 이 파일을 실제로 읽으려면 Ruby File 클래스와 결합해야 합니다.

Btw, 이 점(. )는 현재 디렉토리를 나타냅니다. .

이것은 코드를 실행할 때 (터미널에 있는) 디렉토리가 아니라 코드가 실행되는 디렉토리입니다.

그 때문에…

Dir.pwd를 사용하여 현재 디렉토리를 확인하는 것이 도움이 될 수 있습니다. 방법.

지금 :

Dir 사용법을 알아봅시다. 새 디렉토리를 만드는 클래스(mkdir ), 이름을 바꿉니다(mv). ), 특정 패턴(glob)을 따르는 파일 이름을 찾습니다. ).

Ruby의 Mkdir 메소드를 사용하여 새 디렉토리 생성

Ruby로 새 폴더를 만들려면 Dir.mkdir을 사용할 수 있습니다. 방법.

:

Dir.mkdir("testing")

상대 경로가 주어지면 이 디렉토리는 현재 경로(Dir.pwd ).

몇 가지 오류가 발생할 수 있습니다. :

  • 디렉토리가 이미 있습니다(Errno::EEXIST). )
  • 권한 거부됨(Errno::EACCES )
  • 아직 존재하지 않는 다른 폴더 아래에 폴더를 만들려고 합니다(Errno::ENOENT )

마지막 오류는 일반적으로 중첩된 디렉터리를 만들려고 할 때 발생합니다.

또는 존재하지 않는 절대 경로를 사용하는 경우.

두 가지 솔루션 :

  • 디렉토리를 생성하기 전에 디렉토리가 존재하는지 확인하십시오( Dir.exists? 포함). )
  • 고급 수업 사용(다음 섹션)

계속 배워봅시다!

FileUtils 모듈을 사용한 고급 작업

추가 마력이 필요한 경우 FileUtils를 가져올 수 있습니다. 표준 라이브러리의 모듈입니다.

여기에는 mkdir_p와 같은 메소드가 포함됩니다. 중첩 디렉토리를 한 번에 생성합니다.

예시 :

require 'fileutils'

FileUtils.mkdir_p("/tmp/testing/a/b")

꽤 멋지죠?

그게 다가 아닙니다. FileUtils 또한 키워드 인수의 형태로 모든 파일 작업에 대한 추가 옵션을 제공합니다. verbose처럼 옵션(Linux 명령 인쇄) 및 noop (파일을 변경하지 마십시오) 옵션.

시도해 보세요!

디렉토리 이름을 바꾸는 방법

Ruby를 사용하면 운영 체제 사용자 인터페이스 또는 터미널에서 수행할 수 있는 모든 작업을 수행할 수 있습니다.

예를 들어...

다음과 같이 디렉토리 이름을 바꿀 수 있습니다. :

FileUtils.mv("/tmp/a", "/tmp/b")

FileUtils도 사용해야 합니다. 여기 mv 때문에 Dir에서는 사용할 수 없습니다. 수업.

현재 디렉토리를 변경하는 방법

모든 디렉토리 작업은 현재 디렉토리에서 실행되므로 변경하는 것이 좋습니다.

Dir.chdir을 사용할 수 있습니다. 방법입니다.

:

Dir.chdir("/tmp") { Dir.entries(".") }

이것은 두 가지 방식으로 작동합니다. :

  • 블록을 사용하면 현재 디렉토리가 블록 내부의 코드에 대해서만 변경됩니다.
  • 블록이 없으면 메서드 호출 후 모든 코드에 대해 변경됩니다.

chdir Ruby 프로세스 내에서만 작동하며 "외부 세계"에는 영향을 미치지 않습니다.

즉...

Ruby 프로그램 실행이 중지된 후에도 쉘의 작업 디렉토리는 변경되지 않습니다.

패턴 일치로 파일 및 디렉토리 나열

폴더에 있는 모든 Ruby 파일을 찾고 싶으신가요? glob으로 쉬운 작업 방법!

:

Dir.glob("*.rb")

".txt" 또는 ".yml"과 같이 원하는 다른 확장자를 사용할 수 있습니다. 또는 파일 이름의 일부인 다른 텍스트.

모든 폴더에서 파일을 찾고 싶으신가요?

예, 가능합니다.

Dir.glob("**/*.rb")

결과는 상대 경로를 포함하여 모든 파일 이름이 있는 배열입니다. File.basename을 사용하여 경로를 제거하고 파일 이름만 가져올 수 있습니다. glob에서 가져온 목록의 모든 파일에 대한 메소드 .

요약

Dir를 사용하여 Ruby에서 디렉토리로 작업하는 방법을 배웠습니다. &FileUtils 수업.

이제 여러분이 이것을 실천할 차례입니다.

읽어 주셔서 감사합니다! 🙂