2010-09-08 19 views
24

Ich möchte einen Dateinamen ohne seinen Pfad (wenn es Teil der Zeichenfolge ist) und auch die Erweiterung abrufen.Entfernen Sie Dateierweiterung und Pfad aus einer Zeichenfolge in Perl

Zum Beispiel: „“

/path/to/file/fileName.txt  # results in "fileName" 
fileName.txt     # results in "fileName" 
/path/to/file/file.with.periods.txt # results in "file.with.periods" 

Also im Grunde mag ich, bevor irgendetwas entfernen und mit dem letzten „/“ falls vorhanden und auch den letzten zusammen mit irgendwelchen Meta-Zeichen danach.

Sorry für solch eine neue Frage, aber ich bin neu in Perl.

Antwort

32

Zum portablen Abrufen des Basisnamens einer Datei mit einem vollständigen Pfad würde ich das Modul File::Basename empfehlen, das Teil des Kerns ist.

tun Heuristik auf Dateiendungen I wie für einen regulären Ausdruck gehen würde

(my $without_extension = $basename) =~ s/\.[^.]+$//; 
+1

Bezüglich basename habe ich gerade gelesen: "Diese Funktion wird aus Kompatibilitätsgründen mit dem Unix-Shell-Befehl basename (1) zur Verfügung gestellt. Es gibt NICHT immer den Dateinamen eines Pfades zurück, wie Sie vielleicht erwarten Der Dateiname Teil eines Pfades verwenden Sie fileparse() ". – Chris

+3

Ja, es gibt mehr als eine Funktion im 'File :: Basename' Modul, und sie alle machen verschiedene Dinge. Wählen Sie den, der das tut, was Sie wollen. Zusätzlich existiert eine ähnliche Funktionalität in 'File :: Spec' als' splitpath'. – rafl

13

Sie dies mit einfachen Substitutionen tun können:

$name =~ s{.*/}{};  # removes path 
$name =~ s{\.[^.]+$}{}; # removes extension 

Dieses Beispiel geht davon aus, dass / der Pfad Separators .

+0

Einfach und effektiv. Vielen Dank. – Andy

15

Obwohl andere geantwortet haben, nach ein bisschen auf Basisnamen pro Rafl Antwort zu lesen:

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/); 
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz" 

scheint das Problem in einer Zeile zu lösen.

Gibt es irgendwelche Probleme im Zusammenhang mit den anderen Lösungen?

Verwandte Themen