#!/usr/bin/perl -w # use Getopt::Std; sub usage { print <<'EOF'; ren-perl -- Umbenennung von Dateinamen mit Perl. (C) Peter Breitfeld angelehnt an ein Programm aus dem Perl Cookbook. USAGE: ren-perl [ -h -s ] 'perl-expression' [files] Fehlen "files" wirkt das Skript als Filter, es wird also von stdin gelesen. Die perl-expression muss in Hochkommata eingeschlossen werden, um sie vor der Shell zu schützen. OPTIONEN: -h diese Hilfe anzeigen -s Safety-Modus: nur Ausgabe was gemacht würde, aber nicht umbenennen. BEISPIELE: ren-perl 's/ /_/g' -- alle Leerzeichen in _ umwandeln ren-perl 's/\.orig$//' *.orig -- entfernt alle .orig am Ende ren-perl 'tr/A-Z/a-z/ unless ^Make' * -- alles auf Klein außer Make ren-perl '$_ .= ".alt"' *.f -- an alle *.f hinten .alt anhängen ren-perl 's/_(\d)\./_0$1./' * -- alle "_z." durch "_0z." ersetzen (z ist hier Ziffer wegen \d) KOMPLIZIERTERE BEISPIELE: ren-perl 'print "$_: "; s/von/nach/ if =~/^y/i' * hier wird zuerst gefragt und nur bei Y oder y auch umbenannt. find /tmp -name '*~' -print | ren-perl 's/^(.+)~$/.#$1/' find liefert alle Dateien unterhalb /tmp, die mit einer Tilde enden. Dann werden sie so umbenannt, dass sie stattdessen mit ".#" anfangen. EOF exit 0; } %option=(); getopts("sh", \%option) or die usage; die usage if $option{h}; print "\n" ; $op=shift or die usage(); if ($option{s}) { print "Safety-Modus: zu erwartende Umbenennungen:\n"; print "==========================================\n"; } else { print "Erfolgte Umbenennungen:\n"; print "=======================\n"; } chomp(@ARGV=) unless @ARGV; for (@ARGV) { $alt=$_; # alten Dateinamen merken eval $op; # jetzt steht der neue Name in $_ die $@ if $@; # Fehler! unless ($alt eq $_) # Nur falls alt und neu ungleich: { printf "%-32s --> $_\n", $alt, $_ ; rename($alt,$_) unless $option{s}; } }