Создать дерево каталогов с косой чертой в имени каталога

Попытка создать дерево каталогов, в котором один из каталогов имеет косую черту (/) в имени. Смотрите переменную $artist для имени исполнителя и моих попыток создания каталога.

#!/usr/bin/perl

use warnings;
use strict;
use File::Path qw(make_path);
my $srcpath = '/home/<username>;/music';
my $artist = "";
my $album = 'somealbum';

# Using single quotes

#t1
$artist = 'AC/DC';
make_path("${srcpath}/t1/${artist}/${album}/");

#t2
$artist = 'AC//DC';
make_path("${srcpath}/t2/${artist}/${album}/");

#t3
$artist = 'AC\/DC';
make_path("${srcpath}/t3/${artist}/${album}/");

# Using double quotes

#t4
$artist = "AC/DC";
make_path("${srcpath}/t4/${artist}/${album}/");

#t5
$artist = "AC//DC";
make_path("${srcpath}/t5/${artist}/${album}/");

#t6
$artist = "AC\/DC";
make_path("${srcpath}/t6/${artist}/${album}/");

#t7
$artist = "AC\\/DC";
make_path("${srcpath}/t7/${artist}/${album}/");

Дерево каталогов, которое я хочу (5 папок):
/ -> home -> -> music -> AC / DC -> somealbum

Дерево каталогов, которое я получаю (6 папок):
/ -> home -> -> music -> AC -> DC -> somealbum

2 ответа

Решение

Символ косой черты является недопустимым символом для имени файла или каталога. Вам нужно будет заменить какого-нибудь другого персонажа, например, тире.

Это невозможно не из-за Perl, а потому, что уровень файловой системы ОС запрещает это. Не существует escape-символа, который позволил бы вам вставить / (или NULв этом отношении) в компоненте пути.

Обычный способ, которым это обрабатывается, является прикладной кодировкой, такой как обработка =n как NUL, =s как /, а также =e как =, (Я не знаю ни одного приложения, которое фактически использует эту конкретную кодировку; это всего лишь пример.)

Другие вопросы по тегам