我想使用perl创建文件夹,在同一文件夹中,存在perl脚本。我创建了FolderCreator.pl,它需要输入参数folder name
。
unless(chdir($ARGV[0]){ # If the dir available change current , unless
mkdir($ARGV[0], 0700); # Create a directory
chdir($ARGV[0]) or die "can't chdir $ARGV[0]\n"; # Then change or stop
}
只有当我们在它所在的同一文件夹中调用scipt时,这才能正常工作。如果在另一个文件夹中调用它,则不起作用。
例如
.../Scripts/ScriptContainFolder> perl FolderCreator.pl New
.../Scripts> perl ./ScriptContainFolder/FolderCreator.pl New
第一个工作正常但第二个工作没有。有没有办法创建这些文件夹?
答案 0 :(得分:6)
你可以使用FindBin模块,它给我们$ Bin变量。它找到脚本bin目录的完整路径,以允许使用相对于bin目录的路径。
use FindBin qw($Bin);
my $folder = "$Bin/$ARGV[0]";
mkdir($folder, 0700) unless(-d $folder );
chdir($folder) or die "can't chdir $folder\n";
答案 1 :(得分:4)
我认为它的编写方式与编写完全相同,只是你有一个拼写错误,即错过chdir
左右的右括号。
unless(chdir($ARGV[0])) { #fixed typo
mkdir($ARGV[0], 0700);
chdir($ARGV[0]) or die "can't chdir $ARGV[0]\n";
}
脚本运行如下:
脚本的起始目录将是从中调用的目录,无论该目录是什么。在* nix上,它将是脚本中的$ENV{PWD}
变量。它将在任何有权访问的文件夹中创建一个新文件夹。
我认为这种行为是合乎逻辑的,应该如此。如果您希望您的示例有效,请执行以下操作:
.../Scripts> perl ./ScriptContainFolder/FolderCreator.pl ScriptContainFolder/New
您还可以使用绝对路径,例如
?> FolderCreator.pl /home/m/me/Scripts/ScriptContainFolder/New
ETA:哦,你当然应该总是把它放在你的脚本中,无论多小:
use strict;
use warnings;
答案 2 :(得分:1)
我已完成这项工作,这是代码......谢谢大家的帮助......
#!usr/bin/perl
###########################################################################################
# Needed variables
use File::Path;
use Cwd 'abs_path';
my $folName = $ARGV[0];
#############################################################################################
# Flow Sequence
if(length($folName) > 0){
# changing current directory to the script resides dir
$path = abs_path($0);
$path = substr($path, 0, index($path,'FolderCreator.pl') );
$pwd = `pwd`;
chop($pwd);
$index = index($path,$pwd);
if( index($path,$pwd) == 0 ) {
$length = length($pwd);
$path = substr($path, $length+1);
$index = index($path,'/');
while( $index != -1){
$nxtfol = substr($path, 0, $index);
chdir($nxtfol) or die "Unable to change dir : $nxtfol";
$path = substr($path, $index+1);
$index = index($path,'/');
}
}
# dir changing done...
# creation of dir starts here
unless(chdir($folName)){ # If the dir available change current , unless
mkdir("$USER_ID", 0700); # Create a directory
chdir($folName) or $succode = 3; # Then change or stop
}
}
else {
print "Usage : <FOLDER_NAME>\n";
}
exit 0;