Habe hier einen Einzeiller zum suchen und entpacken.
find $HOME/Archiv/ -type f -name '*.zip' -ok unzip "{}" -d "{}"-unzipped \;
funktioniert an sich ganz prächtig, was mich stört ist das ".zip" im Ordnernamen. Wie ändere ich denn jetzt den String in der geschweiften klammer?

find selbst kann {} nicht modifizieren.

Ich lasse es dran und nehme als Endung einfach .dir also datei.zip.dir/entpackte... das sieht dann weniger störend aus als eine untypische -unzipped Endung.

Ansonsten eben in einem Shellscript die Endung abknipsen "${filename%%.zip}".

Alternativ anschließend das Verzeichnis nochmal umbenennen (rename -- .zip-unzipped -unzipped *.zip-unzipped)

  • Andy@Arch hat auf diesen Beitrag geantwortet.

    frostschutz Ich lasse es dran und nehme als Endung einfach .dir

    mich stört mehr das .zip im Ordnernamen

    frostschutz Ansonsten eben in einem Shellscript die Endung abknipsen "${filename%%.zip}"

    Meinst du so etwas wie das hier
    find "$source" -type f -name '*.zip' -ok sh -c 'file="{}"; unzip "{}" -d "${file%.*}"' \;

    ist das ein Tippfehler oder warum hast du %%, geht doch auch mit einem %?

    P.S. ".zip" mit "-unzipped" ersetzen funktioniert auch
    find "$source" -type f -name '*.zip' -ok sh -c 'file="{}"; unzip "{}" -d "${file/.*/-unzipped/}"' \;

    Ja gibt diverse Möglichkeiten.

    file="{}" könnte mit Sonderzeichen im Dateinamen Ärger machen. Das Quoting hilft hier nicht.

    Du kannst bash -c auch positionale Parameter übergeben und dann "$1" bzw "${1%.zip}" verwenden.

    wie müsste denn das Aussehen, wenn ich da "$1" einbaue findet er den zipfile nicht mehr.

    -exec bash -c 'deine befehle' scriptname {} \;

    scriptname ist $0 da kannst du was beliebiges nehmen. {} wird dann die Zipdatei als "$1"

    Das Verhalten zu $0 ist auch unter man bash, zur -c Option erklärt.

    So ganz verstehe ich das nicht, warum das hier die $0 ist und nicht die $1. Aber das hier funktioniert schon mal
    find $source/ -type f -name '*.zip' -ok bash -c 'unzip "$0" -d "${0%.*}"' {} \;
    bzw wenn man die Endung -unzipped haben möchte
    find $source/ -type f -name '*.zip' -ok bash -c 'unzip "$0" -d "${0/.*/-unzipped}"' {} \;

    ein Monat später

    Eigentlich ist es ja gelöst, habe aber noch einen kleinen Schönheitsfehler entdeckt. Und zwar das bash ... in der Ausgabe, kann man das irgendwie weg bekommen?

    • GerBra hat auf diesen Beitrag geantwortet.

      Andy@Arch in der Ausgabe, kann man das irgendwie weg bekommen?

      Du, schau dir die Ausgabe doch einfach nicht an...

      Machen wir ja auch nicht, da die ja scheinbar geheim ist.

      Rant: Hatten wir doch schon ein paarmal. Zeige doch was du machst, was es (fälschlicherweise?) ausgibt und was du ggf. gerne hättest/erwarten würdest.

      • Andy@Arch hat auf diesen Beitrag geantwortet.

        GerBra Zeige doch was du machst

        Offenbar eine ganze menge Unsinn...... vergesst es einfach. Sieht so aus das man das Verhalten von find -ok das Kommando und die Ausgabe auszugeben nicht ändern kann.