próbowałem
rm -- -
rm "-"
rm "\-"
rm \-
Dał Perlowi szansę
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `rm $junk`;'
-
rm: cannot remove `-': No such file or directory
...i...
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `mv $junk newfile.garbage`;'
-
mv: cannot stat `-': No such file or directory
Każda pomoc będzie mile widziana, mądrzy ludzie.
rm
wersji używasz (rm --version
)?rm -
działa dobrze z GNU coreutils 8.5.rm ./-
Odpowiedzi:
To było publikowane w FAQ Usenetu dla Uniksa - widzę, że jest w FAQ GNU Core Utility . Było co najmniej pięć różnych metod, ale działa to dobrze:
Jeśli nazwa pliku zawiera znaki, których nie można wpisać, użyj:
-i
Flag prosi o potwierdzenie dla każdego pliku, czy powinien on zostać usunięty lub nie.źródło
Usuwanie pliku, którego nazwy zaczynają się od,
-
to często zadawane pytania, ale wygląda na to, że masz inny problem.Z rozwiązań wymienionych w pytaniu:
To powinno działać.
To nie różni się od
rm -
. Cudzysłowy są usuwane przez powłokę, arm
polecenie widzi tylko pojedynczy myślnik jako argument. Znaki cudzysłowu są przydatne do unikania metaznaków powłoki; łącznik jest specjalny dlarm
, a nie dla powłoki.Znaki cudzysłowu uciekają przed odwrotnym ukośnikiem, więc próbuje usunąć plik, którego nazwa składa się z dwóch znaków, odwrotnego ukośnika i łącznika.
To jest tak jak
rm "-"
odpowiednikrm -
.Jak to się dzieje, przynajmniej z GNU Coreutils wersję
rm
,rm -
rzeczywiście Usuwa (lub próby usunięcia) pliku, którego nazwa składa się tylko z myślnikiem. Gdyby twój plik miał taką nazwę, już by go nie było. Doszedłem do wniosku, że twój plik ma nazwę, która tylko przypomina myślnik.powinien dać wyobrażenie o tym, jak to się naprawdę nazywa.
Oto skrypt Perla, który właśnie rzuciłem razem, który wyświetli monit o każdy plik w bieżącym katalogu i poprosi o jego usunięcie. Oferowany bez gwarancji, ale krótko go przetestowałem.
EDYCJA : Mniej skomplikowane rozwiązanie: jeśli nazwa pliku to tylko jeden znak,
rm ?
należy go usunąć (wraz z innymi takimi plikami).źródło
M-bM-^@M-^S
to interpretacja 3-bajtowej reprezentacji UTF-8 znaku Unicode „EN DASH” 0x2013. Zastanawiam się, czy przypadkowo skopiowałeś go i wkleiłeś ze strony internetowej.rm -i *
nie działa? Wygląda na to, że zrobiłby to samo, co skrypt perla./^y/i
raczej/y/i
. W końcu rosyjski użytkownik może wpisać „Nyet”.Jeśli chcesz czegoś bezpieczniejszego ...
Spróbuj użyć kombinacji ls i find (działa to na każdy plik, który masz uprawnienia do usunięcia)
Parametr „-i” daje numer i-węzła dla każdej pozycji katalogu ls -li
Po uzyskaniu numeru i-węzła ...
źródło
-exec rm -i {}
to-i
, aby zachęty do usunięcia. Patrzęman find
i nie widzę żadnego sposobu, aby to zrobić.Dać
rm ./-
szansę.-
Jest flaga rozpocząć flagę argument. Jeśli argument zaczniesz od czegoś innego niż a-
, w tym przypadku/
zostanie przyjęte, że jest to nazwa pliku. Którego chcesz.A ponieważ
file
i./file
są tym samym plikiem, będzie on kierował na plik o nazwie-
via./-
.źródło
Nie tak naukowy, jak większość innych odpowiedzi, ale odpaliłbym wystąpienie
mc
dowódcy o północy i po prostu wybrałem i usunąłem plik.źródło
Próbować:
aby sprawdzić, czy nazwa pliku ma znaki niedrukowalne.
źródło
Nie znaczy to, że powinno być konieczne użycie Perla tutaj, ale powinno to działać:
lub zobaczyć, jaki może być dowolny błąd z powyższym:
źródło
Miałem szczęście, używając Nautilusa GNOME do usuwania źle nazwanych plików. Czy korzystasz z serwera X? Jestem pewien, że inne przeglądarki plików też by działały.
źródło
Jeśli
nie działał, nazwa pliku nie jest „tylko łącznikiem”. Jeśli żadne inne pliki nie mają łącznika, możesz spróbować
źródło
Do tej pory otrzymuję „Brak takiego pliku lub katalogu” dla każdej dotychczas opublikowanej metody:
Wygląda na to, że mam wersję rm 7.4. Spróbuję zaktualizować i ponownie spróbować tych sugestii. Dziękuję wszystkim za pomoc.
źródło
Bardzo lubię używać
dired
trybu w emacs do tego typu rzeczy - po prostu „otwórz” katalog w emacs. Możesz łatwo wybierać pliki i oznaczać je do usunięcia.Inny plakat sugerował użycie dowódcy północy; jest to prawie ten sam pomysł, ale jeśli jesteś już użytkownikiem emacsa, być może jest to wygodniejsze.
źródło
Powinien być w stanie
rm -f '-'
pracować dla mnie w cygwinW tym przypadku
rm -
wydaje się, że działa również na czerwony kapelusz.źródło
rm -
też dla mnie działa.