Wie benenne ich Dateien in monoton inkrementierende Sequenznummern gefolgt von einem Suffix um?

443
Gabrijel Šimunović

Ich möchte alle Dateien in einem bestimmten Verzeichnis in eine Nummer umbenennen, gefolgt von einem Suffix. Zum Beispiel möchte ich alle * .jpg-Dateien in 1.jpg, 2.jpg, 3.jpg, ... umbenennen.

Ich habe darüber nachgedacht, finddies zu verwenden (so etwas find ./*.jpg --exec mv {} <number_of_iteration>.jpg), aber ich weiß nicht, was ich als reinbringen würde <number_of_iteration>.

Kann ich finddas machen? Oder gibt es einen besseren Weg?

0
Hallo Gabrijel. Ich habe Ihre Frage geändert, um sich auf das Problem zu konzentrieren, das Sie scheinbar lösen möchten, und nicht auf Ihre vorgeschlagene Lösung, die möglicherweise der beste Weg ist, dies zu tun. Wenn Sie das Gefühl haben, dass ich dabei Ihre Absicht geändert habe, können Sie entweder ** weiter bearbeiten ** (empfohlen) oder die Bearbeitung komplett rückgängig machen (klicken Sie auf den Link "Vor ... bearbeitet" über meinem Namen und klicken Sie auf "Rollback" über der Revision, auf die Sie zurückrollen möchten). a CVn vor 9 Jahren 0

1 Antwort auf die Frage

1
AFH

Sie müssten die Iteration separat verwalten. Verwenden Sie beispielsweise ein Skript move_count, das Folgendes enthält:

[ -w ~/MoveCount ] || echo 0 >~/MoveCount read count <~/MoveCount ((++count)) echo $count >~/MoveCount mv "$1" "$count.$" 

Dann würde dein findBefehl werden:

find -iname "*.jpg" -exec bash -c "move_count {}" \; 

Beachten Sie, dass dies bashexplizit aufgerufen wird, weil die Standardeinstellung sheinige der von mir verwendeten Syntax nicht versteht. Alternativ können Sie #!/bin/bashdie erste Zeile von move_count.

Könnten Sie nicht einfach `#! / Bin / bash 'ganz oben setzen und die` bash -c` in `-exec` weglassen? a CVn vor 9 Jahren 0
Ja bitte. Ich habe mich an die Verwendung von `bash -c` gewöhnt, nachdem ich zuvor ein anderes Problem mit der Verwendung von` find -exec` mit einer Batchdatei hatte. Ich kann mich nicht genau an die Details erinnern, aber es hat sich vielleicht darauf bezogen, wo die Parameter erweitert wurden, und das trifft hier nicht zu. AFH vor 9 Jahren 0
Ich habe meine Antwort aktualisiert und `.jpg` aus dem` move_count'-Aufruf entfernt: Mein erster Entwurf hat den zweiten Parameter als Erweiterung verwendet, aber dann habe ich ihn geändert, um die Erweiterung aus dem ersten Parameter zu extrahieren, da der ursprüngliche Fall beibehalten wird . AFH vor 9 Jahren 0