Unix: Arquivos começando com um traço, -

19

Ok, eu tenho um monte de arquivos começando com um traço, -. O que não é tão bom ... e quero renomeá-los. No meu caso particular, eu gostaria apenas de colocar um personagem na frente deles.

Eu encontrei a seguinte linha que deve funcionar, mas por causa do traço não:

for file in -N*.ext; do mv $file x$file; done

Se eu colocar um echo na frente do mv , recebo um monte de

mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext

O que está correto, exceto, é claro, que o primeiro nome do arquivo será opções. Então, quando eu remover o echo e executá-lo, é só pegar um monte de

mv: illegal option -- N

Eu tentei mudar para

for file in -N*.ext; do mv "$file" "x$file"; done

mas as aspas são apenas ignoradas parece. Tentei usar aspas simples, mas a variável não foi expandida ... O que eu faço aqui?

Atualização: agora também tentei citar as aspas. Assim:

for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done

E quando eu digo isso, parece correto, mas quando eu o executo eu acabo de receber

mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory

Eu não tenho ideia de como fazer isso agora ... suspiro

    
por Svish 15.03.2010 / 11:39

2 respostas

26

Você precisa usar a palavra-chave -- para informar ao comando mv que os argumentos não devem ser interpretados como opções. Assista:

$ mv -N1.ext x-f1.ext
mv: invalid option -- N
Try 'mv --help' for more information.

$ mv -- -N1.ext x-f1.ext
$ ls
x-f1.ext

Use -- depois de todas as opções na linha de comando. Por exemplo, se você estiver tentando usar a opção -i para mv , ela será anterior -- :

mv -i -- -filename-begins-with-dash newfilename
    
por 15.03.2010 / 11:45
6

Outra técnica é incluir o diretório pai com o nome do arquivo ...

Para renomear o arquivo '-file-to-rename' para 'file-to-rename' ...

mv  ../parent-dir/-file-to-rename  file-to-rename

Obrigado @Skippy le Grand Gourou. Confirmado que ./-file-to-rename funciona com mv e rm como em ...

mv  ./-file-to-rename  ./--file-to-rename

rm  ./-file-to-rename
    
por 20.12.2013 / 08:06