2011-07-08 72 views
0

试图创建一个目录树,其中一个目录的名称中具有正斜杠(/)。查看$艺术家变量为艺术家的名字和我尝试创建目录。在目录名称中使用正斜杠创建目录树

#!/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文件夹):
/- >首页 - > <用户名> - >音乐 - > AC - > DC - > somealbum

+0

有没有想过为什么你会看到带连字符的文件名代表实际上使用斜杠的实体? AC-DC是合法的文件或路径名称。 12-23-2009是一个合法的文件或路径名,而2009年12月23日不是(除非你真的指的是目录'23'中的目录'12'中的2009文件)。 – DavidO

回答

6

的反斜杠字符是一个文件或目录的非法字符名称。您需要替换其他字符,如短划线字符。

+0

不能相信我需要提醒一下。 –

1

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

此的处理的通常方法是通过应用特定的编码,如治疗=nNUL=s/,和作为=e=。 (我不知道任何实际使用特定编码的应用程序;这仅仅是一个例子)