Estoy tratando de cambiar el nombre de un montón de pistas de música en un directorio, pero recibí este error:
Al mover varios archivos, el último argumento debe ser un directorio
Este es el guión:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Esto funciona para un archivo sin espacios en blanco, ¿cómo modificaría este script?
-
. En lugar deecho "$file"
usarprintf '%s\n' "$file"
.mv
. :) Manejaste ese caso :) --- Lo que quise decir fue un problema enecho
sí mismo. Por ejemplo GNU eco (tanto independiente y bash incorporado) no se imprimirá estas cadenas:-n
,-e
y-E
. Incluso de acuerdo con la definición POSIX, no es posible usarlo deecho
manera confiable porque ciertas situaciones no están definidas. Compatible con XSIecho
interpretará secuencias de escape de barra invertida. ---printf '%s\n'
no tiene tales efectos no deseados y dependientes de la implementación.Puede usar prename, que a menudo se distribuye junto con Perl. (Por ejemplo, en Debian, / usr / bin / prename está instalado por el
perl
paquete). Si no está empaquetado por su distribución (busqueprename
yrename
en las ubicaciones de binarios convencionales), está disponible para descargar desde varios lugares, como por ejemplo aquí , aquí o aquí .Este script toma una expresión regular para aplicar a cada uno de los nombres de archivo, y un conjunto de nombres de archivo, y modifica los nombres de esos archivos de acuerdo con esa expresión regular.
Por ejemplo, podrías hacer
para mostrar lo que sucedería si elimina los primeros cinco caracteres en los nombres de archivo. Para ejecutar realmente el cambio de nombre, simplemente elimine el
-n
.fuente