1

试图创建一个目录树,其中一个目录的名称中有一个正斜杠 (/)。查看艺术家名称的$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 个文件夹):
/ -> 主页 -> <用户名> -> 音乐 -> AC/DC -> somealbum

我得到的目录树(6 个文件夹):
/ -> home -> <username> -> music -> AC -> DC -> somealbum

4

2 回答 2

7

斜杠字符是文件或目录名称的非法字符。您将需要替换一些其他字符,例如破折号字符。

于 2011-07-08T23:18:21.613 回答
1

这是不可能的,不是因为 Perl,而是因为操作系统文件系统层禁止它。没有转义字符可以让您在路径组件中嵌入 a /(或 a NUL,就此而言)。

处理这种情况的通常方法是通过特定于应用程序的编码,例如视为=nas NUL=sas/=eas =。(我不知道实际使用该特定编码的任何应用程序;这只是一个示例。)

于 2011-07-08T23:18:51.213 回答