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


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має таку ж проблему, оскільки раніше mvвикликається розширення імені файлів (AKA globbing) .
Вальтер Трос

Відповіді:


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>...би там не було)
підкреслюйте

Блін, у 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), швидше за все, будуть працювати з кількома іншими командами.
TOOGAM

-1

Ця хитрість працює для мене у відчайдушні часи. YMMV

rename \- '' *

Вам потрібно уникнути дефісу для перейменування, щоб розпізнати його. Чому перейменування не поважає одиночні цитати або не пропонує запропонувати якесь переоцінку, - це не в мене.

Це єдиний я бачив метод, який надійно обробляє провідний дефіс, використовуючи перейменування. Я погоджуюся з іншими публікаціями щодо використання mv, але якщо ви не можете використовувати mv з будь-якої причини, це працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.