Perl: verschieben von Dateien in dafür vorgesehenen Ordnern
Ich habe ein perl-script zum verschieben von Dateien von einem Verzeichnis (/Ordner/) zu einem anderen (/Ordner2/) und dann, wenn der name der Datei (File20.doc) entspricht dem Namen des Ordners (Ordner/file20) genau, es wird die Datei in diesen Ordner.
Was ich brauche, ist, wenn ein Teil der Datei dem Namen des Ordners entspricht, der wird diese Datei in diesem Ordner. Zum Beispiel, wenn die Datei den Namen file24.doc es wird diese Datei in file20.
Hier ist das script habe ich so für zu entsprechen, wird extact file-Namen zu den entsprechenden Ordnern.
#!/usr/bin/perl
use warnings;
use File::Copy;
my $srcdir = "/folder/";
my $dest = "/folder2/";
opendir(DIR, $srcdir) or die "Can't open $srcdir: $!";
@files = grep {!/^\.+$/ } readdir(DIR);
foreach my $file (@files) {
my $old = "$srcdir/$file";
move($old, $dest) or die "Move $old -> $dest failed: $!";
}
close(DIR);
print "
-Complete";
exit;
InformationsquelleAutor user731668 | 2011-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich auch vorschlagen meine Lösung für dieses problem. Es ist zwar bei weitem nicht perfekt, es hat, glaube ich, den Vorteil, dass Sie ausklammern der Zielort die Suche nach routine.
InformationsquelleAutor Lumi
Nur erweitert auf Wes ' Antwort ein wenig, um zu berücksichtigen, teilweise übereinstimmungen, denke ich, dass dies funktionieren würde:
Grundsätzlich nur überprüfen Sie für Unterordner für fortschreitend kleiner und kleiner Präfixe den Namen der Datei. Die Datei wird in das Verzeichnis gehen, dem Namen, entspricht dem längsten Präfix.
Die neue stackexchange zu sein scheint, füllen sich mehr und mehr mit downvoters...
Haha. Ich bin neu in die ganze Sache. Ich dachte mir, da würd ich fragte ein paar Fragen, ich soll versuchen zu beantworten, teilweise zu. Aber jetzt Lebe ich in Angst vor der downvote! Ich meine, dass die Angst ist gut zu halten die Antworten, nachdenklich, aber zur gleichen Zeit, vielleicht, wenn jemand downvotes könnten Sie schreiben Sie einen Kommentar zu sagen, was falsch war, damit ich lernen kann, was nicht zu tun.
InformationsquelleAutor Brian Rothstein
Die Funktion, die Sie suchen, ist rename() das ist, was Sie anrufen sollen, statt Sie zu verschieben().
Für den passenden Rahmen, sind Sie wahrscheinlich am besten aus, mit regulären Ausdrücken zu ziehen, der name der Datei Inhalt auseinander und dann prüfen ob das Verzeichnis existiert:
move
ist ein guter Weg, um Dateien umzubenennen.rename
muss nicht unbedingt arbeiten, wenn Sie eine Datei von einem Dateisystem zu einem anderen (je nach OS).move
versuchtrename
ersten, und wenn das nicht funktioniert, Sie verarbeitet es, indem Sie eine Kopie & löschen.InformationsquelleAutor Wes Hardaker