Shellscript: Dateiendung anhängen



  • Hast du meinen 2. Vorschlag [s.o.] schon getestet? Und wie hast du Linuxfreaks Version aufgerufen?



  • @fubar:

    Deine Lösung (

    #!/bin/bash
    for i in "`find 1/* -type f\`"; do echo "i"; done

    )

    funktioniert zwar, es werden alle Dateien aufgelistet,

    aber bei (

    #!/bin/bash
    for i in "`find 1/* -type f\`"; do mv "i" "$i.tif"; done

    )

    werden alle Dateinamen aneinandergefügt und mv meldet: File name too long

    Die Lösung von Linuxfreak hab ich in eine Datei geschrieben:

    #!/bin/bash
    find "$1/*" -type f -print0 -exec xargs -0 mv '{}' \{\}.$2 \;

    und mit ./rename.sh verzeichnis endung ausgeführt

    Es heisst dann: find: verzeichnis/*: No such file or directory

    Ich glaub ich bring ein Buch raus: "Jetzt lerne ich Shellscript in 21 Posts" 😃



  • Hab noch das gefunden:

    find "dir" -type f -print | while read f; do n="\`dirname \\"f\"`/`basename \"f\\" | sed 's/ /_/g'\`" if test -e "n"; then
    echo "Ziel \"n\\" existiert" >&2 else mv "f" "$n"
    fi
    done

    Sagt mir aber dann: find: invalid predicate `'

    PS: Geklaut von: http://www.jan-trippler.de/quickies/files.html



  • pasti schrieb:

    Ok hab das ganze gerade an den Orginaldaten ausprobiert. Das Problem ist jetzt nur, dass ganz vieeele Leerzeichen und Punkte in den Dateinamen sind 😡 . Die kanne das Script jetzt natürlich nicht verarbeiten. Gibts da irgend eine Lösung?

    Danke

    😃

    Das kann man wirklich als Buch rausbringen. Köstlich
    Die Leerzeichen kann man ja auch ersetzen, jetzt wird's lustig:

    #!/bin/bash
    
    for i in `find $1/* -type f`; do
    realname=`echo $i | sed "s/ /\\ /"`
     mv $realname $realname.$2
    done;
    

    Ungeprüft, kann das mal jemand vereinfachen!
    Evtl. mit Xargs 😃



  • ºgrimmsenº® schrieb:

    #!/bin/bash
    
    for i in `find $1/* -type f`; do
    

    Peng, genau hier liegt der Fehler. 🙂
    Stell Dir mal vor $1 ist foo und in foo liegt eine Datei namens "baz bar" (mit Leerzeichen).
    Was wird dann die Bash wohl (in Ermangelung eines echten Array-Typs) machen?
    Genau! foo/baz und bar getrennt bearbeiten. 🙂



  • So, einmal will ich aber auch noch 😉

    #!/bin/bash
    find "$1"/* -type f -exec mv '{}' \{\}.$2 \;

    😕



  • @nman:

    Logisch... Denkfehler meinerseits
    Wie wäre das:

    #!/bin/bash
    
    for i in `find $1/* -type f | sed "s/ /\\/g"`; do
    realname=`echo $i | sed "s/\\/\\ /g"`
     mv $realname $realname.$2
    done;
    

    Mmmh... müßte funzen, oder pasti 😃



  • Und nachdem ich mir das ganze hier nicht länger ansehen kann: 😉
    Probier mal sowas:

    #!/bin/bash
    find "$1" -type f -exec mv '{}' \{\}.$2 \;
    


  • ºgrimmsenº® schrieb:

    Wie wäre das:

    #!/bin/bash
    for i in `find $1/* -type f | sed "s/ /\\/g"`; do
    

    Schlecht, probiers aus. 😃



  • Hab mich ja schon entschuldigt...

    🙄



  • ºgrimmsenº® schrieb:

    Hab mich ja schon entschuldigt...

    🙄

    Wofür denn, ich hab Dich ja eh ausgebessert. 🙂



  • Ich liebe for-Schleifen ... Aber wer benutzt eigentlich Leerzeichen bei Dateinamen? Ihhh...
    In der Shell leidet dann immer mein tab-Taste...

    [geschlossen] ⚠



  • Auso ihr beide, es scheinen beide Lösungen zu funktionieren, kann aber den Reallife erst morgen in der Firma machen.

    Aber wer benutzt eigentlich Leerzeichen bei Dateinamen? Ihhh...

    Na wer wohl?

    Unsere GrafikerINNEN haben ihre 10000 Bilder in der Form

    /Artikel 43735435.1684348/Spezieller Katalog/12.48.5874/ab Nummer 458.18/Bild

    abgespeichert.

    Ohne Endung 😃 und jetzt frisst die neue Grafiksoftware die Bilder nicht mehr. Eigentlich hätte ich auch sagen können, sie müssen nun alle Bilder von Hand umbenennen, das hätte 😮 gegeben. Dafür wäre der Lerneffekt grandios gewesen 🤡 . Aber so fies kann man fast nicht sein, oder 😕



  • pasti schrieb:

    Aber so fies kann man fast nicht sein, oder 😕

    Du hast den BOFH noch nicht gelesen, oder? 🙂
    Hol das bei Gelegenheit nach! 😉



  • Nochmals vielen Dank an alle! Ihr habt einigen Elementen userer Gesellschaft das Umbennennen tausender Dateien erspart. Nun ja, ich hätte ja nicht dazugehört :p


Anmelden zum Antworten