2012-04-07 4 views
2

Ich versuche, alle _ Unterstreichungszeichen durch - Bindestrich Zeichen in allen Dateinamen .mat in einem Ordner zu ersetzen. Ich tippe verschiedene Versionen erfolglos von:Underscore in Rename-Befehl (Perl und Unix-Shell)

rename -f 'w/_/-' *.mat 

Kann mir jemand erklären, was falsch ist?

Antwort

4

Wenn Sie a Perl-based rename (wie Ihre Tags vorschlagen) verwenden, ist w kein Perl-Regex-Vorgang.

+0

Danke, @Daxim. Ich benutze immer noch eine geringfügig aktualisierte Version des Perl 'rename' aus der 1. Auflage des Camel Book. –

+0

Diese Arbeit !!! Danke @Leffler. Ich habe zuerst mit 's' versucht, später aber mit 'w'. Aber ich weiß nicht, dass ich g am Ende verwenden muss – escorciav

+0

@escorciav: AFAIK, das 'w' ist kein Perl-Substitutionsoperator. Das 'g' am Ende stellt sicher, dass alle Unterstriche durch Bindestriche ersetzt werden. Wenn Sie nur den ersten Unterstrich zuordnen möchten, brauchen Sie das 'g' nicht. Es besteht die Möglichkeit, dass das Skript das 'g' automatisch anwendet. –

2

Ich kann nicht ergründen, ob Sie eine Shell-Umbenennung oder die Perl-Umbenennung verwenden: Ich kann Ihren Befehl in keinem der beiden Kontext verstehen.

Ein Perl-Befehlszeilenskript alle *.mat Dateien im aktuellen Verzeichnis umbenennen sieht wie folgt aus

perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat 
+1

Ersetzen Sie "glob" @ARGV "' durch '@ ARGV'. Du triffst etwas, das bereits geplottet wurde. Je nach Dateiname führt das entweder zu nichts oder zu falschen Ergebnissen. Insbesondere wird Ihr Muster fehlschlagen, wenn eine der "mat" -Dateien ein Leerzeichen in ihrem Namen enthält. [FEST] – ikegami

Verwandte Themen