GNU/Linux >> Linux Esercitazione >  >> Linux

Come modificare l'estensione di più file?

Vorrei cambiare l'estensione di un file da *.txt a *.text . Ho provato a usare il basename comando, ma ho problemi a modificare più di un file.

Ecco il mio codice:

files=`ls -1 *.txt`

for x in $files
do
    mv $x "`basename $files .txt`.text"
done

Ricevo questo errore:

basename: too many arguments Try basename --help' for more information

Risposta accettata:

Direttamente dal Wiki di Greg:

# Rename all *.txt to *.text
for f in *.txt; do 
    mv -- "$f" "${f%.txt}.text"
done

*.txt è un pattern di globbing, usando * come carattere jolly per corrispondere a qualsiasi stringa. *.txt corrisponde a tutti i nomi di file che terminano con '.txt'.

-- segna la fine dell'elenco delle opzioni. Ciò evita problemi con i nomi di file che iniziano con trattini.

${f%.txt} è un'espansione di parametro, sostituita dal valore di f variabile con .txt rimosso dalla fine.

Vedi anche la voce sul perché non dovresti analizzare ls .

Se devi usare basename , la tua sintassi sarebbe:

for f in *.txt; do
    mv -- "$f" "$(basename -- "$f" .txt).text"
done

Linux
  1. Come cambiare l'identità di un sistema Linux

  2. Come comprimere più file su Linux

  3. Come rinominare più file usando Trova?

  4. Come trovare più stringhe nei file??

  5. Come modificare l'autorizzazione su un singolo file?

Come modificare ricorsivamente le autorizzazioni dei file in Linux

Linux Rinomina estensione file multipli

Come modificare la password di root in Linux

Come modificare il nome host del server in Ubuntu

Come modificare la porta SSH in CentOS

Come modificare il fuso orario su Ubuntu 18.04 Server?