
Ich habe Unterordner mit Bindestrichen (Beispiel: Unterordner mit dem Namen „cd“). Ich muss alle .jpg-Dateien in allen Unterordnern umbenennen. Irgendwelche Tipps, wie das geht? Ich habe viele Möglichkeiten ausprobiert, aber nichts hat geholfen (ich glaube, weil meine Unterordner Bindestriche enthalten -) Danke, Leute! :)
Ich habe versucht
find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;
aber immer
(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"
Antwort1
Es besteht kein Grund zur Umbenennung, da Sie dies einfach mit mv tun können.
find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
mv -i bedeutet interaktiv. Es fragt vor dem Überschreiben nach.
Dies wird nicht eingehend getestet, sondern nur ad hoc, um sicherzustellen, dass Dateien unterschiedliche Namen erhalten. Ein wenig mehr Test wäre:
find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
Allerdings werden dadurch alle Dateien in das aktuelle Verzeichnis verschoben. Vielleicht ist die Verwendung von -execdir eine Option?
find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
Mache aber trotzdem ein Backup, gehe sorgsam mit deinen Daten um usw. Massenaktionen mit find sind ein scharfes Instrument. Ich übernehme dafür keine Verantwortung.
Soweit ich weiß, sind bei diesem Rennen keine Pferde dabei.
Antwort2
Sie sind sich nicht sicher überWieSie möchten Dateien umbenennen. SoweitwelcheMit den umzubenennenden Dateien können Sie find
alle Dateien nach dem gewünschten Muster mit einem Bindestrich abgleichen:
find [PATH...] -type f -name '*-*' | prename EXPR
Wenn Sie auch Verzeichnisse abgleichen möchten, müssen Sie die -depth
folgende Option verwenden:
find [PATH...] -depth -name '*-*' | prename EXPR
Antwort3
Ich habe dies gerade bei Unterordnern mit einem Bindestrich im Namen versucht und es hat funktioniert.
Rekursives Umbenennen von Teilen von Dateinamen in Linux/Ubuntu
Zum Umbenennen von Dateien verwenden Sie diefindenBefehl in Verbindung mit demumbenennenBefehl wie folgt:
find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;
Wenn Sie also alle Bindestriche "-" in allen JPG-Dateinamen durch Unterstriche "_" ersetzen möchten, geben Sie Folgendes ein:
find -type f -execdir rename 's/-/_/' *.jpg '{}' \;