2013-03-15 74 views
1

我很新的Perl和我想提出的是创建一个目录,并使用Unix命令就像一个文件移动到该目录中的程序:Perl中的Unix命令?

mkdir test 

我知道会创建一个名为目录“测试”。从那里我想给更多的选项,如:

mv *.jpg test 

这将移动所有.jpg文件到我的新目录。

到目前为止,我有这样的:

#!/usr/bin/perl 

print "Folder Name:"; 
$fileName = <STDIN>; 
chomp($fileType); 

$result=`mkdir $fileName`; 
print"Your folder was created \n"; 

谁能帮我这个?

+2

Perl有它自己的'mkdir'功能... – jordanm 2013-03-15 14:51:36

+2

'使用严格的;使用警告;' – mob 2013-03-15 14:52:25

+0

http://www.perlmonks.org/?node_id = 627015 – toolic 2013-03-15 14:53:23

回答

3

尝试这样做:

#!/usr/bin/perl 

use strict; use warnings; 

print "Folder Name:"; 
$dirName = <STDIN>; 
chomp($dirName); 

mkdir($dirName) && print "Your folder was created \n"; 
rename $_, "$dirName/$_" for <*.jpg>; 

你将不得不使用内置perl功能比使用Unix命令更好的控制。这是我的片段的重点。

+0

+1 - 您是否复制了我的链接? – 2013-03-15 14:54:58

+0

谢谢@sputnick,但它给了我这个:您的文件夹被创建 用法:mv [-f | -i | -n] [-v]源目标 mv [-f | -i | -n] [-v]源...目录 – Scope 2013-03-15 14:55:43

+0

你的链接和我的头顶之间的混合;) – 2013-03-15 14:55:43

1

大部分(如果不是全部)的Unix命令也有一个相应的版本作为功能

的mkdir - 见here

MV - 见here

等等要么得到一个打印在各种手册页面之外(或者可能到书店去旅行 - O'Reilly坚果壳书与其他书很好)。

+0

+1提醒! =) – 2013-03-15 15:15:27

0

在perl中,你可以在反引号中使用bash命令。但是,当目录不是由mkdir命令创建时会发生什么?你的程序没有得到这个通知,并继续以愉快的方式认为一切都很好。

你应该在perl中使用内置命令来做同样的事情。

它与那些功能捕获错误更容易和失败优雅。另外,它们的运行速度更快,因为您不必为每个运行的命令分配新的进程。

0

Perl有一些类似于shell的函数。你可以只用

mkdir $filename; 

可以使用反引号运行shell命令,但命令返回任何到其标准输出,这mkdir没有它只是有用。对于没有输出的命令,使用system

0 == system "mv *.jpg $folder" or die "Cannot move: $?";