1

我对 Perl 很陌生,我想制作一个程序来创建一个目录并使用 Unix 命令将文件移动到该目录中,例如:

mkdir test

我知道会创建一个名为“test”的目录。从那里我想提供更多选择,例如:

mv *.jpg test

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

到目前为止,我有这个:

#!/usr/bin/perl

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

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

谁能帮我解决这个问题?

4

4 回答 4

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 命令有更好的控制。这就是我的片段的重点。

于 2013-03-15T14:52:57.737 回答
1

大多数(如果不是全部)Unix 命令都有相应的版本作为函数

例如

mkdir - 见这里

mv - 看这里

等等。要么从各种手册页中打印出来(或者可能去书店一趟——O'Reilly 坚果壳书和其他书都很好)。

于 2013-03-15T14:54:05.533 回答
0

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

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

使用这些函数捕获错误并优雅地失败要容易得多。此外,它们运行得更快,因为您不必为每个运行的命令创建一个新进程。

于 2013-03-15T14:54:54.270 回答
0

Perl 有一些类似于 shell 的功能。你可以使用

mkdir $filename;

您可以使用反引号来运行 shell 命令,但仅当命令将任何内容返回到其标准输出时才有用,而标准输出mkdir则没有。对于没有输出的命令,使用system

0 == system "mv *.jpg $folder" or die "Cannot move: $?";
于 2013-03-15T14:56:22.520 回答