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

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
$
RedGrittyBrick
источник
Это решает ту же проблему для 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
gniourf_gniourf
источник
очень хороший обходной путь, это никогда не приходило мне в голову. И в отличие от принятого ответа, это будет работать на BSD / Mac OS X
Шридхар Сарнобат
Это немного более броский, чем --.
Корни
-1

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

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

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

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

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

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

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

rename \- '' *

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

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

Алекс З
источник