error al intentar mv un archivo con -r en el nombre del archivo

error al intentar mv un archivo con -r en el nombre del archivo

Aquí está mi problema:

Tengo un archivo con -r en el nombre:-r.jpg

Cuando intenté hacer un mv *.jpg old/me sale:

mv: invalid option -- 'r'

Incluso para

for g in *.jpg;do echo $g &&mv "${g}" old/;done

Yo tengo el mismo error.

Respuesta1

La mayoría de las utilidades de línea de comandos tienen una disposición para separaropcionesdeargumentos.

Esto evita multitud de problemas con"especial"nombres de archivos que parecen opciones.

El separador más común que indica el final de las opciones son dos guiones --o --que también está respaldado por mv.

En otras palabras:

 mv [OPTIONS] -- SOURCE DEST

o como no especificaste ninguna opción:

 mv -- *.jpg old/

Respuesta2

La solución más sencilla sería anteponer el nombre del archivo con la ./descripción de la ruta relativa.

for g in *.jpg; do echo $g && mv "./${g}" old/; done

También es posible utilizar la ruta absoluta.

for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done

Alternativamente, es posible que desee utilizar el findcomando, ya que ya proporciona la ruta relativa (puede utilizar --max-depthsi desea procesar solo el directorio actual)

for g in $(find . -name "*jpg"); do mv $g old; done

Y en el peor de los casos, en el que tiene muchos caracteres complejos que no se pueden analizar, puede consultar los números de inodo combinados con find -inumy procesar sus archivos en consecuencia.

 $ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done

información relacionada