Nie można zmienić nazwy pliku, którego nazwa zaczyna się od myślnika


37

Próbuję zmienić nazwę pliku z łącznikiem na początku jego nazwy i zarówno to:

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

i to:

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

skutkować w:

mv: invalid option -- 'e'

1
Albo użyj względnej ścieżki do pliku (./tmp/-example), pełnej ścieżki (/ home / a / tmp / -example) lub powiedz mv, że skończyłeś podawać opcje - i że poniżej są pliki nazwy.
Ярослав Рахматуллин

W przypadku, gdy ktoś zastanawia się: mv *example-file-name example-file-namema ten sam problem, ponieważ rozszerzenie nazwy pliku (globowanie AKA) ma miejsce przed mvwywołaniem.
Walter Tross,

Odpowiedzi:


53

Większość poleceń GNU / Linux pozwala --opcjom wskazać koniec opcji, aby kolejne -prefiksy nie były traktowane jako opcje.

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

Mały test

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

To rozwiązuje również ten sam problem rename. (przynajmniej wersja, która działa rename [options] <expression> <replacement> <file>..., cokolwiek to jest.)
underscore_d

Cholera, BSD / Mac OS X mvnie ma tego :(
Sridhar Sarnobat,

18

Odpowiedź RedGrittyBrick jest bardzo dobra. Inną opcją jest:

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

Mały test:

$ 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

bardzo fajne obejście, nigdy nie przyszło mi to do głowy. I w przeciwieństwie do przyjętej odpowiedzi, zadziała to na BSD / Mac OS X
Sridhar Sarnobat,

To trochę bardziej chwytliwe niż --.
Corni,

-1

Możesz użyć tego:

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

że może zmienić nazwę wszystkich plików :), jeśli nazwa pliku:

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

po uruchomieniu kodu twoja nazwa pliku staje się:

ngshay01[]FLV

1
Inne podejścia (jedno z RedGrittyBrick i gniourf_gniourf) częściej współpracują z kilkoma innymi poleceniami.
TOOGAM,

-1

Ta sztuczka działa na mnie w czasach desperacji. YMMV

rename \- '' *

Musisz zmienić myślnik, aby zmienić nazwę, aby go rozpoznać. Dlaczego zmiana nazwy nie szanuje pojedynczych cudzysłowów ani nie oferuje jakiegoś zastąpienia, jest poza mną.

To jedyna metoda, jaką widziałem, która niezawodnie obsługuje wiodący łącznik, używając zmiany nazwy. Zgadzam się z innymi postami dotyczącymi korzystania z mv, ale jeśli nie możesz użyć mv z jakiegokolwiek powodu, to działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.