Me gustaría cambiar la extensión de un archivo de *.txt
a *.text
. Intenté usar el basename
comando, pero tengo problemas para cambiar más de un archivo.
Aquí está mi código:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
Recibo este error:
basename: too many arguments Try basename --help' for more information
Respuesta aceptada:
Directamente de la wiki de Greg:
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
*.txt
es un patrón global, usando *
como comodín para coincidir con cualquier cadena. *.txt
coincide con todos los nombres de archivo que terminan en '.txt'.
--
marca el final de la lista de opciones. Esto evita problemas con los nombres de archivos que comienzan con guiones.
${f%.txt}
es una expansión de parámetros, reemplazada por el valor de f
variable con .txt
eliminado del final.
Consulte también la entrada sobre por qué no debe analizar ls
.
Si tiene que usar basename
, su sintaxis sería:
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done