find Befehl und das /tmp Verzeichnis

jamanikun

Mitglied
Thread Starter
Dabei seit
11.12.2005
Beiträge
83
Reaktionspunkte
2
Hallo zusammen,

ich schreibe an einem Perl-Skript und möchte dies auf ein paar Dateien testen, ohne Schaden anzurichten (nun gut, im folgenden Skript Auszug kann offenbar nichts passieren).

Ich habe daher die entsprechenden Dateien in das /tmp Verzeichnis kopiert und rufe nun test.pl mit dem Argument "/tmp" auf. Es wird damit nur "/tmp" ausgegeben.

Da aber File::Find::find mittels Tiefensuche das übergebenen Verzeichnis durchlaufen soll und ich in /tmp tatsächlich Unterverzeichnisse habe, hat mich die Ausgabe gewundert. Gebe ich nun "/tmp/" als Argument mit, kommen schließlich die Unterverzeichnisse, jedoch jetzt als "/tmp//Verz1" etc. - also mit zwei Slashes nach dem "tmp"...

Mit anderen Verzeichnissen (/Applications) funktioniert es tadellos. Nun die Frage: Bug oder Feature? Mit dem Darwin "find" geht's nämlich auch genau so...


# callback function for File::Find
sub wanted {
#print $_, "\n" if m/^.*\.h\z/s;
print $File::Find::name, "\n";
}

if ($#ARGV < 0) {
print "no directory specified!\n";
exit 0;
}

find (\&wanted, @ARGV)

 
Nur so eine wilde Vermutung: Könnte daran liegen, dass /tmp ein Symlink ist.

Alex
 
Korrekte Vermutung! Ich wußte gar nicht, dass /tmp nur auf /private/tmp verweist.

Offenbar gibt es in File::Find noch die Möglichkeit, eine "follow" Option zu setzen. Aber ich muss noch herausfinden, wie diese in die callback Funktion kommen soll.

Einfacher als ich dachte...
find ({wanted => \&wanted, follow => 1}, @ARGV)
 
Zurück
Oben Unten