Ok, tengo un montón de archivos que comienzan con un guión, -. Lo que no es tan bueno ... y quiero cambiarles el nombre. En mi caso particular, me gustaría poner un personaje delante de ellos.
Encontré la siguiente línea que debería funcionar, pero debido a su guión no funciona:
for file in -N*.ext; do mv $file x$file; done
Si pongo un echo
frente del mv
me sale un montón de
mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext
Lo cual es correcto, excepto que, por supuesto, pensará que el primer nombre de archivo es opciones. Entonces, cuando elimino echo
y lo ejecuto, obtengo un montón de
mv: illegal option -- N
He tratado de cambiarlo a
for file in -N*.ext; do mv "$file" "x$file"; done
pero las citas simplemente se ignoran al parecer. Intenté usar comillas simples, pero luego la variable no se expandió ... ¿Qué hago aquí?
Actualización: ahora también he intentado citar las citas. Me gusta esto:
for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done
Y cuando hago eco de eso, parece correcto, pero cuando lo ejecuto, simplemente obtengo
mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory
No tengo ni idea de cómo hacer esto ahora ... suspiro
Respuestas:
Debe usar la palabra clave
--
para indicarle al comando mv que los argumentos no deben interpretarse como opciones. Reloj:Use
--
después de todas las opciones en la línea de comandos. Por ejemplo, si está tratando de usar la-i
opción para mv , iría antes--
:fuente
./
delante del nombre del archivo, lo que funcionaría. Pero esta es, por supuesto, una opción aún más./
. pero tienes razón, eso también funciona para esta situación.--
significado no procesa más argumentos ya que las opciones son una convención y no todos los programas lo respetan. Algunos usan un solitario-
para eso, y otros no aceptan nada para ese propósito. Por lo tanto,./
vale la pena tener en cuenta anteponer.--
como argumento especial es una extensión GNU, pero se menciona en las pautas POSIX. consulte la sección 12.2, directriz 10: opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... esto significa que puede esperar que la mayoría de las utilidades POSIX y GNU respeten la convención, pero otras no.Otra técnica es incluir el directorio padre con el nombre del archivo ...
Para cambiar el nombre del archivo '-file-to-rename' a 'file-to-rename' ...
Gracias @Skippy le Grand Gourou. Confirmó que ./-file-to-rename funciona con
mv
yrm
como en ...fuente
./
.