Não é possível renomear um arquivo cujo nome começa com um hífen

37

Estou tentando renomear um arquivo com um hífen no início do nome e isso:

mv -example-file-name example-file-name

e isto:

mv '-example-file-name' example-file-name

resulta em:

mv: invalid option -- 'e'
Desmond Hume
fonte
1
Use o caminho relativo do arquivo (./tmp/-example), o caminho completo (/ home / a / tmp / -example) ou diga ao mv que você acabou de dar opções - e que o seguinte é o arquivo nomes.
Novрослав Рахматуллин
Caso alguém se pergunte: mv *example-file-name example-file-nametem o mesmo problema, porque a expansão do nome do arquivo (AKA globbing) acontece antes mvé chamada.
Walter Tross

Respostas:

53

A maioria dos comandos GNU / Linux permite uma --opção para indicar o fim das opções, para que as -palavras prefixadas subsequentes não sejam tratadas como opções.

  mv -- -example-file-name example-file-name

Um pequeno teste

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
RedGrittyBrick
fonte
Isso resolve o mesmo problema renametambém. (pelo menos a versão que funciona como rename [options] <expression> <replacement> <file>..., qualquer um que seja.)
underscore_d
Droga, o BSD / Mac OS X mvnão tem isso :(
Sridhar Sarnobat
18

A resposta de RedGrittyBrick é muito boa. Outra opção é:

mv ./-example-file-name example-file-name

Um pequeno teste:

$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example
gniourf_gniourf
fonte
solução muito boa, isso nunca me ocorreu. E, diferentemente da resposta aceita, isso funcionará no BSD / Mac OS X
Sridhar Sarnobat
Isso é um pouco mais cativante do que --.
Corni
-1

Você pode usar isto:

rename -- "s/\-//g" *

que ele pode renomear todos os arquivos :) se o seu nome de arquivo:

-ng--sh-ay-01[------------]-FLV

após o código de execução, seu nome de arquivo se torna:

ngshay01[]FLV
k-five
fonte
1
As outras abordagens (a de RedGrittyBrick e gniourf_gniourf) têm mais probabilidade de funcionar com vários outros comandos.
TOOGAM
-1

Esse truque funciona para mim em momentos de desespero. YMMV

rename \- '' *

Você precisa escapar do hífen para renomear para reconhecê-lo. Por que renomear não respeita aspas simples ou oferece algum tipo de substituição está além de mim.

Este é o único método que eu vi que lida com segurança com um hífen principal usando renomear. Concordo com os outros posts sobre o uso de mv, mas se você não pode usá-lo por qualquer motivo, isso funciona.

Alex Z
fonte