mv, umbenennen, falls vorhanden


26

Ich muss viele Bilder in einem Verzeichnis zusammenstellen. Viele dieser Bilder haben den gleichen Dateinamen.

Gibt es eine sichere Version, mit der mvDateien automatisch umbenannt werden, wenn der Zieldateiname bereits vorhanden ist, sodass er ungefähr so pic1.jpegaussieht pic1_2.jpeg?

Ich könnte mein eigenes Python-Skript schreiben, aber da draußen muss es so etwas geben, damit ich Folgendes tun kann:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

Antworten:


38

mv unterstützt dies bereits von Anfang an (zumindest in Debian):

mv --backup=t <source_file> <dest_file>

Wie in der Manpage von mv (1) zu sehen:

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

Um --backup=t"nummerierte Backups" zu erstellen, rufen Sie Folgendes auf:

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>

(dest_file kann natürlich ein Verzeichnis sein).

Edit: In späteren Versionen (mindestens GNU Coreutils 8.22 aber schon viel früher) kann man einfach schreiben

mv --backup=numbered <source_file> <dest_file>

1
+1 für eine erstaunlich saubere Lösung. Übrigens ist die Option auch auf RHEL 6 verfügbar.
Paweł Brodacki

Obwohl dies eine nette Funktion ist, hilft es in meinem Fall nicht viel, da das Suffix nach der Erweiterung angehängt wird, so dass die Dateien Namen wie .jpg ~ 1 ~ haben, während ich sie als _1.jpg bezeichnen müsste. Ich werde wahrscheinlich mmv verwenden, um die Dateien nach dem Verschieben umzubenennen.
Donnerstag,

4
dies ist der mmv Befehl, mein gewünschtes Ergebnis nach tun mv --backup = nummerierte erreichen: mmv -v " "# 1_ # 3 # 2" ~ * ~."
TheDuke

Auf meinem Debian-System (mmv 1.01b-18) lautet der korrekte mmv-Befehl:mmv -v "*.*~*~" "#1_#3.#2"
Xavier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.