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