script zum umbenennen von dateinamen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von supersucker, 08.02.2006.

  1. #1 supersucker, 08.02.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    hi,

    nachdem mein k3b andauernd mit dateinamen nicht klar kommt, die sonderzeichen haben oder zu lang sind (obwohl rock ridge und joliet extensions aktiviert sind und ich ja noch gefragt werde ob ich die namen entsprechend gekürzt haben, kackt k3b dann vorm brennen trotzdem ab) , wollte ich fragen ob jemand ein programm / script kennt, das zb. ein verzeichnis als eingabe nimmt und dann einfach alle dateinamen die in diesem verzeichnis sind in ein "brennfreundliches" format bringt, also sonderzeichen entfernt, name kürzt usw.....

    hab bisher detox gefunden, das kann ich aber nicht kompilieren da make wie folgt abbricht (nachdem configure fehlerfrei durchgelaufen ist):

    Code:
    gcc -c -g -O2 table.c
    gcc -c -g -O2 parse_table.c
    gcc -c -g -O2 config_file_l.c
    gcc -c -g -O2 config_file_y.c
    gcc -c -g -O2 parse_options_getopt.c
    gcc -c -g -O2 parse_options_generic.c
    gcc -o detox detox.o clean_string.o file.o table.o parse_table.o config_file_l.o config_file_y.o parse_options_getopt.o parse_options_generic.o
    config_file_l.o: In function `yylex':
    /home/jollyroger/Desktop/tmp/detox/detox-1.2.0-rc1/lex.yy.c:915: undefined reference to `yywrap'
    collect2: ld returned 1 exit status
    make: *** [detox] Error 1
    
    kennt jemand noch ein anderes programm / und oder kann mit dem make-error was anfangen?

    danke für jeden tip
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Xanti, 08.02.2006
    Zuletzt bearbeitet: 28.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich hab mir mal vor längerer Zeit ein Perlskript für einen ähnlichen Zweck geschrieben. Ist wahrscheinlich nicht perfekter Code, da ich damals noch Perl gelernt habe. Benutzung auf eigene Gefahr! ;)

    rename.pl:
    PHP:
    #!/usr/bin/perl

    use File::Find;
    use 
    strict;
    use 
    utf8;
    use 
    vars qw/ %opt /;

    sub convert;
    sub init;
    sub usage;

    init;
    for (@
    ARGV) {
        
    finddepth {wanted => \&convertno_chdir => 0}, $_ if $opt{r};
        
    convert $_
    }

    ##################################################
    sub convert {
        
    my $newfilename = (my $filename $_);
        
    my %subst = ('Ä' => 'Ae''Ö' => 'Oe''Ü' => 'Ue''ä' => 'ae',
            
    'ö' => 'oe''ü' => 'ue''ß' => 'ss''\s' => '_''\.(?=.*\.)' => '_');
        for (
    keys %subst){
            
    $newfilename =~ s/$_/$subst{$_}/g
        
    }
        
    $newfilename =~ s/[^\w\-\.\/]//g;
        
    $newfilename lc $newfilename if $opt{l};
        if ((-
    e $filename) && (!-f $newfilename) && ($filename ne $newfilename)) {
            print 
    "$filename -> $newfilename\n";
            
    my $yesno;
            if (! 
    $opt{f}) {
                do {
                    print 
    "[y/n]: ";
                    
    chomp($yesno = <STDIN>)
                } while (
    $yesno !~ /^y|n$/i)
            }
            
    rename "$filename""$newfilenameif ($opt{f} || ($yesno =~ /y/i))
        } 
    elsif ($opt{v}) {
            print 
    "no conversion: $filename\n"
        
    }
    }

    ##################################################
    sub init {
        use 
    Getopt::Std;
        
    my $opt_string 'fhlrv';
        
    getopts ("$opt_string", \%opt) or usage;
        
    usage() if $opt{h};
    }

    ##################################################
    sub usage {
        (
    my $program = $0) =~ s!.*?/!!g;
        print 
    STDERR << "EOF";

    This program converts file/dir names.

    usage$program [-fhlrvfiles/dirs

        
    -f        force
        
    -h        this (helpmessage
        
    -l        convert to lower case
        -
    r        recursive
        
    -v        verbose

    EOF
        
    exit
    }
    edit: Kleine Korrektur
     
  4. nic

    nic typeT

    Dabei seit:
    25.01.2006
    Beiträge:
    34
    Zustimmungen:
    0
    Phorus war schneller, aber ich hab da auch grade ne Kleinigkeit zusammengebastelt.
    Du musst nur
    $dirname und $max_length anpassen und das Ganze dann ausfuehren.
    Es werden alle Zeichen bis auf alphanumerische Zeichen, Unterstrich und Punkt aus dem Dateinamen entfernt, dann falls noetig gekuerzt, wobei die Endung erhalten bleibt.
    Falls eine Datei mit eben diesem Namen schon existiert wird sie nicht ueberschrieben.
    Diese Dateien muessen dann im Nachinein noch per Hand rename'd werden.
    Solltest du also viele Dateien mit gleichem Anfang haben à la "artist_song1.mp3, artist_song2.mp3 ..." muesstest du noch eine entsprechende Anpassung vornehmen.

    Ach ja, und vorher immer Backups machen ;-)

    Code:
    #!/usr/bin/perl -w
    
    use strict;
    use warnings;
    
    my $dirname = '/home/foo/bar';
    my $max_length = 8;
    
    my $file;
    
    opendir(DIR, $dirname) or die "can't opendir $dirname: $!\n";
    
    while(defined($file = readdir(DIR)))
    {
    	next if $file =~ /^\.\.?$/;
    	my $oldname = $file;
    	$file =~ s/[^\w\.]//g;
    	if(length($file) > $max_length)
    	{
    		my $ext;
    		if($file =~ /\.\w+$/)
    		{
    			$ext = $&;
    		}
    		($max_length - length($ext) > 0) ? ($file = substr($file, 0, $max_length - length($ext)).$ext) : 
    											($file = substr($file, 0, $max_length));
    	}
    	rename($dirname."/".$oldname, $dirname."/".$file) or warn "couldn't rename $oldname to $file: $!\n" 
    		unless (-e $dirname."/".$file);
    }
    
    
    closedir(DIR);
    
    print "all done... exiting\n";
    
    Gruß
    Nic
     
  5. #4 supersucker, 08.02.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    danke für eure mühen....

    ja, mein perl ist auch schon ne weile her, aber ich denke mal ich werde mir ein eigenes script schreiben, das auf euren beiden aufbaut.....ein bestimmtes lizenzmodell werd ich bei euren scripten nicht beachten müssen, oder?....:-)

    ne, was ich halt gern noch hätte wäre das ich dem script nur einen ordner gebe und das ding dann halt auch noch alle evtl. enthaltenen unterordner mit durchgeht......
    kann mir nicht schaden meine perl-kenntnisse wieder aufzufrischen......

    danke soweit!
     
  6. #5 DennisM, 09.02.2006
    DennisM

    DennisM Moderator u. Newsposter

    Dabei seit:
    08.05.2004
    Beiträge:
    4.883
    Zustimmungen:
    0
    Ort:
    GER/NRW/Essen
    Verschoben nach Shell-Skripte.

    MFG

    Dennis
     
Thema:

script zum umbenennen von dateinamen

Die Seite wird geladen...

script zum umbenennen von dateinamen - Ähnliche Themen

  1. Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen

    Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen: Hallo Board, ich habe eine CSV datei, in der Name;Vorname;RECNUMBER;AUSBILENDE;Geburtsdatum;Geschlecht;Klasse...
  2. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  3. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  4. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  5. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...