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