[Bash] Script per rinominare ricorsivamente files

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2928
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

[Bash] Script per rinominare ricorsivamente files

Messaggio da DoctorStrange »

Buongiorno a tutti,

Scrivo qui, oggi per chiedere un chiarimento su uno script di cui avrei bisogno.

Io ho una cartella piena di immagini il cui nome però, è una caotica sequenza di cifre decimali, ed io vorrei realizzare uno script che mi permetta di rinominare ricorsivamente tutti i files contenuti in questa cartella, aggiungendo semplicemente alla fine di ogni immagine un iteratore che mi permetta di distinguerle.

Ho provato a seguire questa guida, ma il risultato che ottengo, è solo parziale, in quanto mi permette semplicemente di anteporre una stringa costante ad ogni file, ma non elimina il precedente nome già esistente del file.

Dal momento che stò ancora studiando bash chiedo aiuto alla comunity per modificare lo script di cui dispongo in maniera da eliminare l'esistente nome con un semplice iteratore.

Grazie mille

Leonardo
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40354
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: [Bash] Script per rinominare ricorsivamente files

Messaggio da steff »

Ci sono mille modi, nella mia collezione ho questo script (non è recursivo e case-sensitive):

Codice: Seleziona tutto

#!/bin/bash
#Rinomina con nome_data_ora_secondi le foto nella directory
# $1 nome iniziale del file.
#
for i in *.JPG; do mv $i $1_`exiv2 -p s $i | grep timestamp | awk '{ print $4 $3 $5}'`.JPG; done
Se lo salvi in ~/bin dovrebbe essere nel $PATH.

In ogni modo fai delle prove o fai un backup prima di provare vari script.
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Bash] Script per rinominare ricorsivamente files

Messaggio da rai »

integro quello che ha scritto steff perchè
1) le immagini potrebbero non contenere metadati usabili con exiv2
2) potrebbero non essere solo .JPG ma anche PnG, TifF etc
3) nel nome potrebbero esserci caratteri speciali (spazi p.es.)

Per sicurezza, invece di rinominare, lo script copia i file in un'altra cartella col nuovo nome (quando sei persuaso del risultato modifichi cp in mv)

Codice: Seleziona tutto

#!/bin/bash

# PERSONALIZZA QUESTE RIGHE
# vvvvvvvvvvvvvvvvvvvvvv
ORIGINE=percorso_della_cartella_con_le_immagini_originali
DEST=percorso_della_cartella_con_le_immagini_rinominate
PREFISSO=il_prefisso_comune_a_tutti_i_rinominati
# ^^^^^^^^^^^^^^^^^^^^^^

# crea la cartella destinazione
[[ -d "$DEST" ]] ||  mkdir -p "$DEST"

# identifica i file da rinominare ricorsivamente (anche nelle sottoCartelle)
SOURCES=$(find "$ORIGINE" -iregex ".*\.\(jpg\|jpeg\|png\|tiff\)") # analogamente per tutte le estensioni necessarie
 
IFS=$'\n' # nel caso i nomifile contengano spazi
for LINE in $SOURCES; do
    EXT="${LINE##*.}" 
    ((NUM++))
# rinomina i file aggiungendogli il n°incrementale
    NEWNAME="$PREFISSO$NUM.$EXT"
    cp "$LINE" "$DEST/$NEWNAME"
done
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti