Zufällige Suffixe zu Dateinamen hinzufügen

Ich möchte den Dateinamen vieler Dateien ändern, indem ich den vorhandenen Dateinamen ein zufälliges Suffix hinzufüge.

Ich habe versucht, diesen Code zu ändern (ändert den Dateinamen, anstatt ein Suffix hinzuzufügen), aber ohne Erfolg.

#!/bin/bash

chars=( {a..z} {A..Z} {0..9} )

function rand_string {
    local c=$1 ret=
    while((c--)); do
        ret+=${chars[$((RANDOM%${#chars[@]}))]}
    done
    printf '%s\n' "$ret"
}

for file in ~/Desktop/test/*; do
    ext=$(echo ${file} | sed 's,^.*(\.[^\.]*$),\1,')
    mv "$file" ~/Desktop/test/"$file$(rand_string 10)"${ext}
done

Eine Befehlszeilen- oder Automatisierungslösung wäre vorzuziehen

Was genau haben Sie versucht, können Sie das Skript hinzufügen, das Sie bisher haben?
derzeit habe ich die letzte Zeile mit einer zusätzlichen Variablen geändert, aber ich habe einen Fehler bekommen
#!/bin/bash chars=( {a..z} {A..Z} {0..9} ) function rand_string { local c=$1 ret= while((c--)); do ret+=${chars[$((RANDOM%${#chars[@]}))]} done printf '%s\n' "$ret" } for file in ~/Desktop/test/* do ext= $(echo ${file} | sed 's,^.*(\.[^\.]*$),\1,') mv "$file" ~/Desktop/test/"$file$(rand_string 10 )"${ext} fertig

Antworten (1)

Wenn Sie nur eine zufällige Zeichenfolge anhängen möchten, forist die Schleife ziemlich einfach:

cd ~/Desktop/test/
for file in *; do
    suffix="${file##.*}"
    base="${file%.*}"
    mv "$file" "$base.$(rand_string 10).$suffix"
done

Ändern Sie das 10in die Anzahl der zufälligen Zeichen, die Sie hinzufügen möchten.

Tnx Patrix für deine Antwort. Das Skript funktioniert, aber jetzt wird das Suffix nach der Dateierweiterung hinzugefügt. Natürlich bin ich nicht gut darin, Code zu ändern, aber sehen Sie eine Möglichkeit, das Suffix nach dem Dateinamen, aber vor der Dateierweiterung hinzuzufügen?
@El-Ekim Bitte stellen Sie sicher, dass Ihre Frage alle Fakten widerspiegelt. In diesem Fall wäre es hilfreich gewesen, einige klare Vorher/Nachher-Beispiele für Dateinamen zu haben.
Du hast Recht Patrix. Ich hätte ein Beispiel für die Dateinamenkonvertierung geben sollen. Wenn ich Ihre for-Schleife verwende, erhalte ich eine Fehlermeldung: mv: rename /Users/Ekim/Desktop/test/xmas_candles.jpg to /Users/Ekim/Desktop/test/xmas_candles.HF8ohLw0Gl./Users/Ekim/Desktop/test /xmas_candles.jpg: Keine solche Datei oder kein Verzeichnis Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen.
@El-Ekim Ah, es funktioniert nur im aktuellen Verzeichnis, also ist ein cderforderlich. Und wenn Sie sich Ihren Fehler ansehen, haben Sie möglicherweise auch irgendwo einen Tippfehler.
super, es funktioniert super! :) tnx für dich Zeit