Не могу переименовать файл, имя которого начинается с дефиса


37

Я пытаюсь переименовать файл с дефисом в начале его имени, и оба это:

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

и это:

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

результат в:

mv: invalid option -- 'e'

1
Либо используйте относительный путь к файлу (./tmp/-example), полный путь (/ home / a / tmp / -example), либо скажите mv, что вы закончили с предоставлением опций - и что последующее - это файл имена.
Ярослав Рахматуллин

В случае, если кто-то задается вопросом: mv *example-file-name example-file-nameимеет ту же проблему, потому что расширение имени файла (AKA globbing) происходит до того, как mvвызывается.
Уолтер Тросс

Ответы:


53

Большинство команд GNU / Linux позволяют --указывать конец параметров, чтобы последующие -префиксные слова не рассматривались как параметры.

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

Небольшой тест

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$

Это решает ту же проблему для renameтоже. (по крайней мере, версия, которая работает как rename [options] <expression> <replacement> <file>..., какая бы она ни была.)
underscore_d

Черт, у BSD / Mac OS X mvэтого нет :(
Шридхар Сарнобат

18

Ответ RedGrittyBrick очень хороший. Другой вариант:

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

Небольшой тест:

$ 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

очень хороший обходной путь, это никогда не приходило мне в голову. И в отличие от принятого ответа, это будет работать на BSD / Mac OS X
Шридхар Сарнобат

Это немного более броский, чем --.
Корни

-1

Вы можете использовать это:

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

что он может переименовать весь файл :), если ваше имя файла:

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

после запуска кода ваше имя файла становится:

ngshay01[]FLV

1
Другие подходы (один от RedGrittyBrick и gniourf_gniourf) с большей вероятностью будут работать с несколькими другими командами.
ТООГАМ

-1

Этот трюк работает для меня во времена отчаяния. YMMV

rename \- '' *

Вы должны избежать дефиса для переименования, чтобы распознать его. Почему переименование не учитывает одинарные кавычки или предлагает какое-либо переопределение, мне не понятно.

Это единственный метод, который я видел, который надежно обрабатывает ведущий дефис, используя переименование. Я согласен с другими сообщениями об использовании mv, но если вы не можете использовать mv по какой-либо причине, это работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.