Ok, mam kilka plików zaczynających się od myślnika, -. Co nie jest tak dobre ... i chcę je zmienić. W moim szczególnym przypadku chciałbym po prostu postawić przed nimi postać.
Znalazłem następujący wiersz, który powinien działać, ale z tego powodu myślnik nie działa:
for file in -N*.ext; do mv $file x$file; done
Jeśli postawię echo
przed mv
, dostanę kilka
mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext
Co jest poprawne, z tą różnicą, że pierwsza nazwa pliku to opcje. Więc kiedy usuwam echo
i uruchamiam, po prostu dostaję kilka
mv: illegal option -- N
Próbowałem to zmienić na
for file in -N*.ext; do mv "$file" "x$file"; done
ale wydaje się, że cytaty są po prostu ignorowane. Próbowałem użyć pojedynczych cudzysłowów, ale zmienna nie została rozwinięta ... Co mam tutaj zrobić?
Aktualizacja: próbowałem teraz zacytować cytaty. Lubię to:
for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done
A kiedy to powtarzam, wygląda to poprawnie, ale kiedy faktycznie go uruchamiam, po prostu dostaję
mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory
Nie mam pojęcia, jak to zrobić teraz ... westchnienie
Odpowiedzi:
Musisz użyć słowa kluczowego,
--
aby powiedzieć komendzie mv, że argumentów nie należy interpretować jako opcji. Zegarek:Użyj
--
po wszystkich opcjach w linii poleceń. Na przykład, jeśli próbujesz użyć-i
opcji mv , byłoby to wcześniej--
:źródło
./
się nazwy pliku, co zadziała. Ale jest to oczywiście jeszcze./
żadnego z nich. ale masz rację, to też działa w tej sytuacji.--
znaczenie nie przetwarza dalszych argumentów, ponieważ opcje są konwencją i nie są przestrzegane przez wszystkie programy. Niektórzy używają do tego samotnych-
, a niektórzy nie akceptują niczego w tym celu../
Warto więc pamiętać o przygotowaniu.--
jako specjalny argument jest rozszerzeniem GNU, ale zostało wspomniane w wytycznych POSIX. patrz sekcja 12.2, wytyczna 10: opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... oznacza to, że możesz oczekiwać, że większość narzędzi POSIX i GNU będzie przestrzegać konwencji, ale inne mogą tego nie robić .Inną techniką jest dołączenie katalogu nadrzędnego do nazwy pliku ...
Aby zmienić nazwę pliku „-file-to-rename” na „file-to-rename” ...
Dziękuję @Skippy le Grand Gourou. Potwierdzono, że ./-plik- do-nazwa działa z
mv
irm
jak w ...źródło
./
.