2009-06-26 7 views
13

Perl에서 어떻게 하위 디렉토리를 만들 수 있으며 동시에 부모 디렉토리가없는 경우 만들 수 있습니까? UNIX의 mkdir -p 명령과 비슷합니까? 파일 : 경로 모듈에서하나의 Perl 명령으로 디렉토리와 상위 디렉토리를 만드는 방법은 무엇입니까?

+0

이 질문을 추가 했으므로 언제든지 다시 보지 않고 쉽게 다시 찾을 수 있습니다. 나는 POSIX.pm에서 이것을 항상 찾는다. 이유가있다. – skiphoppy

답변

22
use File::Path qw(make_path); 
make_path("path/to/sub/directory"); 

사용되지 않는 mkpath 선호 make_path 5 개 운반이 그 here을 보관 처리 스레드 Perl로 토론 막아야.

간단히 말해서 Perl 5.10 테스트는 makepath() 인터페이스의 인수 구문 분석에서 어색함을 나타 냈습니다. 따라서 함수의 옵션을 설정하기 위해 해시를 최종 인수로 사용하는 간단한 버전으로 바뀌 었습니다.

+3

@skiphoppy :이 질문에 언급 된 것처럼 여전히 "UNIX의 mkdir -p 명령"과 다릅니다. mkdir의 맨 페이지에 -p, --parents no error if existing, make parent directories as needed이 표시되지만 make_path는 디렉토리가 존재하면 false를 반환합니다. (즉, make_path "/ tmp/foo"또는 die; #/tmp/foo가 존재하면 죽을 것이다) – Randall

3

사용 mkpath는 :

use File::Path qw(mkpath); 
mkpath("path/to/sub/directory"); 
+1

이것을 지금 조사해 보면 mkpath()가 더 이상 사용되지 않으며 공식 인터페이스가 이제 make_path()라는 것을 알 수 있습니다. 누군가가 우리에게 무엇을 사는지에 대한 훌륭한 설명을 쓴다면 그 대답을 받아 들일 것입니다. – skiphoppy

0

심판 http://perldoc.perl.org/File/Path.html

"그렇지 않은 존재 할 경우 make_path 기능은 주어진 디렉토리를 생성 [원문!] 전에, 많은 유닉스 명령 mkdir -p처럼"당신이 펄을 찾고 있다면

3

가 친절하게 무시 '에서 mkdir -p'기능이 있지만, 다음 코드를 사용하여 모듈이 작동합니다 :

my $dir = '/root/example/dir'; 

system ("mkdir -p $dir 2> /dev/null") == 0 
    or die "failed to create $dir. exiting...\n"; 

당신은 모듈을 사용할 수 있지만 당신은 당신이 포트에 코드를하려는 각 서버에 설치해야합니다. 필자는 일반적으로 mkdir과 ​​같은 작업에 시스템 기능을 사용하는 것을 선호합니다. 왜냐하면 모듈을 가져오고 호출하는 데 드는 오버 헤드가 적기 때문에 디렉토리를 만들 때 한 번만 사용해야합니다.

+0

모듈을 설치하지 않으려는 경우이 방법이 적합하다. 나는 보통 내가 필요로하는 모듈의 설치를 요구하거나 시스템을 지원하기를 거부한다. :) 나는 모듈을 사용하여 테스트와 연구의 이점을 얻을 수 있으므로 시스템 호출을 확인하지 못하거나 오류 메시지의 출력을 잃어 버리는 등의 실수를 피할 수 있으며 오버 헤드가 적기 때문에 프로세스를 만들 수 있습니다. – skiphoppy

+0

운영 체제에 종속성을 생성하지 않습니까? –