私は基本的にはディレクトリに渡されたプログラムを持っています。ファイル名がパターンと一致する場合は、ディレクトリを作成し、その特定のファイルを移動します。ディレクトリ。一致しない場合は、PassedInDir/misc/
ディレクトリに移動してください。Perlディレクトリがif(!-d)文を過ぎていますか? [readdir results]
どちらの場合も、私のプログラムはif(! -d $fp)
のようなものです(私のプログラムはまだ対処できません)。
ディレクトリ内で初めて実行するとすべてうまく動作します。しかし、同じディレクトリ(ディレクトリのみを含むはずです)で再度実行すると、エラーCould not move file assignmentZ to destination DataB/misc at projectSorter.pl line 16.
が発生します。 AssignmentZはディレクトリですが、何とか2番目の場合は(!-d)
を過ぎてしまいます。
#!/usr/bin/perl -w
use File::Copy;
if(@ARGV < 1){
print "\nUsage: proj6.pl <directory>\n\n";
exit;
}
die("\nDirectory $ARGV[0] does not exist\n\n") if(! -e $ARGV[0]);
opendir(DIR, $ARGV[0]) or die("\nCould not open directory $ARGV[0]\n\n");
while(($fp = readdir(DIR))){
if($fp =~ m/proj(.*)\./){
(! -d "$ARGV[0]/assignment$1") && (mkdir "$ARGV[0]/assignment$1");
move("$ARGV[0]/$fp" , "$ARGV[0]/assignment$1") or die("Could not move file $fp to destination $ARGV[0]/assignment$1");
}
elsif(! -d $fp){ #gets past here!!!
(! -d "$ARGV[0]/misc") && (mkdir "$ARGV[0]/misc");
move("$ARGV[0]/$fp" , "$ARGV[0]/misc") or die("Could not move file $fp to destination $ARGV[0]/misc");
}
}
私のプログラムを1回実行することでこれを実行するのは、これが唯一のディレクトリです。なぜこれが起こっているのか不思議です。