mv, rinomina se esiste


26

Devo assemblare molte immagini in una directory. Molte di quelle immagini hanno gli stessi nomi di file.

Esiste una versione sicura mvche rinominerà automaticamente i file se il nome file di destinazione esiste già in modo che pic1.jpegdiventi qualcosa del genere pic1_2.jpeg?

Potrei scrivere il mio script Python ma ci deve essere qualcosa di simile là fuori in modo che io possa fare:

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

Risposte:


38

mv lo supporta già immediatamente (almeno in Debian):

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

Come visto nella manpage mv (1):

--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.

Per rendere --backup=t"fare backup numerati" significa, invocare come segue:

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

(dest_file può ovviamente essere una directory).

Modifica: nelle versioni successive (almeno GNU coreutils 8.22 ma prolly già molto prima) puoi semplicemente scrivere

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

1
+1 per una soluzione incredibilmente pulita. A proposito, l'opzione è presente anche su RHEL 6.
Paweł Brodacki,

Sebbene funzioni bene, questo non aiuta molto nel mio caso poiché aggiungerà il suffisso dopo l'estensione, quindi i file finiranno con nomi come .jpg ~ 1 ~ mentre avrei bisogno che si chiamassero _1.jpg. Probabilmente userò mmv per rinominare i file dopo averli spostati.
giovedì

4
questo è il comando MMV che permetterà di conseguire il mio risultato desiderato dopo aver fatto mv --backup = numerata: MMV -v " "# 1_ # 3. # 2" ~ * ~."
theduke

Sul mio sistema Debian (mmv 1.01b-18), il comando mmv corretto è:mmv -v "*.*~*~" "#1_#3.#2"
Xavier
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.