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'

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
$

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

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.