GNU/Linux >> Linux Esercitazione >  >> Linux

Rinomina di massa del file Bash con contatore?

Voglio rinominare tutti i file in una cartella con PREFIX+COUNTER+FILENAME

ad es.
input:

england.txt  
canada.txt  
france.txt

uscita:

CO_01_england.txt  
CO_02_canada.txt  
CO_03_france.txt

Risposta accettata:

Questo fa quello che chiedi:

n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done

Come funziona

  • n=1

    Questo inizializza la variabile n a 1.

  • for f in *.txt; do

    Questo avvia un ciclo su tutti i file nella directory corrente i cui nomi terminano con .txt .

  • mv "$f" "CO_$((n++))_$f"

    Questo rinomina i file in modo che abbiano il CO_ prefisso con n come contatore. Il ++ il simbolo dice a bash di incrementare la variabile n .

  • done

    Questo segnala la fine del ciclo.

Miglioramento

Questa versione utilizza printf che consente un maggiore controllo su come verrà formattato il numero:

n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done

In particolare, il %02i format metterà uno zero iniziale prima del numero quando n è ancora a una cifra.


Linux
  1. Lettura di righe da un file con Bash:per vs. Mentre?

  2. Come sostituire gli spazi nei nomi dei file usando uno script bash

  3. Aggiunta di timestamp a un nome file con mv in BASH

  4. Come verificare se un file è vuoto in Bash?

  5. Esecuzione di uno script bash o di un binario c su un file system con l'opzione noexec

Bash:Scrivi su file

Comando sorgente Bash

Bash:aggiungi al file

Reindirizzamento Bash spiegato con esempi

Come lavorare con hardlink e softlink in Linux

Impossibile rinominare un file il cui nome inizia con un trattino