Okay, ich habe ein Programm, das im Grunde untersucht in einem übergebenen Verzeichnis, wenn alle Dateinamen mit einem Muster übereinstimmen Ich werde ein Verzeichnis und verschieben Sie diese bestimmte Datei und jede, die es passt (unabhängig von der Erweiterung) in das Verzeichnis. Wenn sie nicht übereinstimmen, sollte ich sie in das Verzeichnis PassedInDir/misc/
verschieben.Perl-Verzeichnis ist vorbei, wenn (! -d) Anweisung? [readdir Ergebnisse]
Ich habe eine Bedingung in beiden Fällen zu vermeiden, in einem beliebigen Verzeichnis übergeben (wie mein Programm ist nicht bereit, mit denen noch zu tun) so etwas wie if(! -d $fp)
.
Alles funktioniert gut, wenn ich es das erste Mal im Verzeichnis ausführen. Wenn ich es jedoch erneut auf demselben Verzeichnis (das jetzt nur Verzeichnisse enthalten sollte) ausführen, erhalte ich den Fehler Could not move file assignmentZ to destination DataB/misc at projectSorter.pl line 16.
. AssignmentZ ist ein Verzeichnis, das im zweiten Fall irgendwie über die (!-d)
hinausgeht.
#!/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");
}
}
Es ist das einzige Verzeichnis, das es aus denen macht, die vorher gemacht wurden, indem ich mein Programm einmal ausführte. Ich bin neugierig, warum das passiert.