Как создать каталог и родительские каталоги с помощью одной команды Perl?

StackOverflow https://stackoverflow.com/questions/1050365

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Пожалуйста, игнорируйте, если вы ищете модуль 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, потому что импорт и вызов модуля требуют меньших затрат, когда он мне нужен только один раз для создания каталога.

ссылка http://perldoc.perl.org/File/Path.html

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

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

Пример:

use strict;
use warnings;

my $directory = "tmp";

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top