Aqui está o meu problema:
Eu tenho um arquivo com -r no nome:-r.jpg
Quando tentei fazer um, mv *.jpg old/
recebi:
mv: invalid option -- 'r'
Mesmo para
for g in *.jpg;do echo $g &&mv "${g}" old/;done
Eu tenho o mesmo erro.
Responder1
A maioria dos utilitários de linha de comando tem uma provisão para separaropçõesdeargumentos.
Isso evita uma série de problemas com"especial"nomes de arquivos que parecem opções.
A indicação de separador mais comum no final das opções são dois hífens --
ou --que também é suportado por mv
.
Em outras palavras:
mv [OPTIONS] -- SOURCE DEST
ou já que você não especificou nenhuma opção:
mv -- *.jpg old/
Responder2
A solução mais simples seria preceder o nome do arquivo com a ./
descrição do caminho relativo
for g in *.jpg; do echo $g && mv "./${g}" old/; done
Também é possível usar o caminho absoluto
for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done
Alternativamente, você pode querer usar o find
comando, pois ele já fornece o caminho relativo (você pode usar --max-depth
se quiser processar apenas o diretório atual)
for g in $(find . -name "*jpg"); do mv $g old; done
E no pior caso em que você tem muitos caracteres complexos não analisáveis, você pode consultar os números de inode combinados com find -inum
e processar seus arquivos de acordo
$ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done