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