Создать дерево каталогов с косой чертой в имени каталога
Попытка создать дерево каталогов, в котором один из каталогов имеет косую черту (/) в имени. Смотрите переменную $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 ->
Дерево каталогов, которое я получаю (6 папок):
/ -> home ->
2 ответа
Символ косой черты является недопустимым символом для имени файла или каталога. Вам нужно будет заменить какого-нибудь другого персонажа, например, тире.
Это невозможно не из-за Perl, а потому, что уровень файловой системы ОС запрещает это. Не существует escape-символа, который позволил бы вам вставить /
(или NUL
в этом отношении) в компоненте пути.
Обычный способ, которым это обрабатывается, является прикладной кодировкой, такой как обработка =n
как NUL
, =s
как /
, а также =e
как =
, (Я не знаю ни одного приложения, которое фактически использует эту конкретную кодировку; это всего лишь пример.)