Как создать каталог и родительские каталоги в одной команде Perl? - PullRequest
15 голосов
/ 26 июня 2009

Как в Perl создать подкаталог и одновременно создать родительские каталоги, если они не существуют? Как команда mkdir -p в UNIX?

Ответы [ 5 ]

24 голосов
/ 26 июня 2009
use File::Path qw(make_path);
make_path("path/to/sub/directory");

Устаревший mkpath и предпочтительный make_path возникли в результате обсуждения в архиве Perl 5 Porters, которое заархивировано здесь .

В двух словах, тестирование Perl 5.10 показало неловкость в разборе аргументов интерфейса makepath (). Поэтому он был заменен более простой версией, в которой в качестве окончательного аргумента использовался хеш для установки параметров функции.

3 голосов
/ 17 сентября 2012

Пожалуйста, игнорируйте, если вы ищете модуль Perl с функциональностью 'mkdir -p', но следующий код будет работать:

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

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

Вы можете использовать модуль, но затем вам нужно установить его на каждый сервер, на который вы собираетесь портировать свой код. Я обычно предпочитаю использовать системную функцию для работы, такой как mkdir, потому что это меньше затрат на импорт и вызов модуля, когда он мне нужен только один раз для создания каталога.

3 голосов
/ 26 июня 2009

Использовать mkpath из модуля File :: Path:

use File::Path qw(mkpath);
mkpath("path/to/sub/directory");
0 голосов
/ 11 июля 2018

mkdir () позволяет вам создавать каталоги в вашем скрипте Perl.

Пример:

use strict;
use warnings;

my $directory = "tmp";

unless(mkdir($directory, 0755)) {
        die "Unable to create $directory\n";

Эта программа создает каталог с именем "tmp" с разрешениями, установленными на 0755 (только владелец имеет право на запись в каталог; члены группы и другие могут только просматривать файлы и просматривать содержимое каталога).

0 голосов
/ 16 сентября 2012

ref http://perldoc.perl.org/File/Path.html

"Функция make_path создает данные каталоги, если они не существуют [sic!] Ранее, так же, как команда Unix mkdir -p"

...