Как я могу создать каталог, если он не существует с помощью Perl? - PullRequest
10 голосов
/ 31 марта 2009

В настоящее время мой вывод Perl жестко задан для дампа в следующий каталог Unix:

my $stat_dir = "/home/courses/" . **NEED DIR VAR HERE**;

Имя файла построено так:

$stat_file = $stat_dir . "/" . $sess.substr($yr, 2, 2) . "_COURSES.csv";

Мне нужен похожий подход к созданию каталогов Unix, но мне нужно сначала проверить, существуют ли они, прежде чем создавать их.

Как сделать автоматическую нумерацию (ревизии) файла $ stat_file, чтобы при перекачке этих файлов в один и тот же каталог они не перезаписывались и не добавлялись к существующим файлам в этом каталоге?

Ответы [ 4 ]

15 голосов
/ 31 марта 2009

Эмм ... mkdir $stat_dir unless -d $stat_dir?

Не кажется хорошей идеей встраивать подобные «лишние» вопросы.

14 голосов
/ 31 марта 2009

Используйте оператор -d и File :: Path .

use File::Path qw(make_path);
eval { make_path($dir) };
if ($@) {
  print "Couldn't create $dir: $@";
}

make_path имеет преимущество перед mkdir в том, что может создавать деревья произвольной глубины.

И используйте -e, чтобы проверить, существует ли файл

my $fileSuffix = 0;
while (-e $filename) {
    $filename = $filePrefix . ++$fileSuffix . $fileExtension;
}
3 голосов
/ 31 марта 2009

Помните, что существование каталога -d не означает -w доступный для записи. Но, если вы находитесь в личном кабинете, mkdir($dir) unless(-d $dir) будет работать нормально.

3 голосов
/ 31 марта 2009

Perl имеет встроенную функцию mkdir

Посмотрите на perldoc perlfunc или программу mkdir из Perl Power Tools .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...