Jakiego polecenia należy użyć, aby usunąć plik o nazwie `-rf`?

67

W pewnym momencie zrobiłem coś szalonego, co spowodowało utworzenie pliku -rfw moim systemie plików.
Teraz nie mogę wymyślić, jak go usunąć ...

Próbowałem:

rm "-rf"
rm \-rf

Po prostu wychodzą natychmiast, arrgh!

Czy ktoś wie, jak usunąć ten plik? Najlepiej bez przypadkowego wyczyszczenia całego folderu.

Pierre-Antoine LaFayette
źródło
33
Trochę nerwów próbuje rmplik wywołany -rfz twojego systemu, nie pamiętając dokładnej składni!
ChristopheD
3
Aby wyjaśnić, dlaczego te nie działają: Cytaty i ucieczki są przetwarzane przez powłokę (zwykle bash), a następnie wynik parsowania jest przekazywany rm(w to argca argv) Zatem oba te wynikają w tablicy ["rm", "-rf"]są przekazywane rm, co spełnia oczekiwania
Thanatos,
3
Myślę, że jest to bliższe duplikatowi tego z Unix i Linux stackexchange
frabjous
12
Stary knebel polega na umieszczeniu pliku o nazwie *w folderze. Dołącz też jeden o nazwie -rfi obserwuj zabawę ;-)
RBerteig
@RBerteig: mkdir './-rf '(ls --classify, wspólne ustawienie domyślne w aliasie powłoki, dołącza /)

Odpowiedzi:

127
unlink -rf

Lub

rm -- -rf
Josh Lee
źródło
47
Jest to najbardziej przydatne rozwiązanie do nauki IMO, ponieważ „-”, aby zatrzymać przetwarzanie argumentów, jest znormalizowane we wszystkich narzędziach GNU
Nathan O'Sullivan
1
Aby być bardziej precyzyjnym, wszystko za pomocą GNUgetopt ma --, co powinno oznaczać najbardziej nowoczesnych narzędzi Linux.
Geoffrey Zheng
60

Inna opcja:

rm ./-rf

... zakładając, że bieżący katalog jest tym, w którym znajduje się plik.

Martin Clayton
źródło
34

Alternatywnie możesz zawsze edytować katalog w nim i usunąć plik w ten sposób.

vim .

a następnie po prostu usuń wiersz z plikiem na nim (użycie D, dd nie będzie działać).

oadams
źródło
5
niezła sztuczka! [Kilka bezużytecznych znaków]
Sergio Acosta
Nie sądziłem, że zasługiwało to na negatywne opinie, jakie miałem, kiedy po raz pierwszy zobaczyłem tę odpowiedź tego popołudnia, ale nie miałem okazji sprawdzić, czy vimma tryb dired. Oczywiście edycja samego katalogu w edytorze tekstów nie jest ani zalecana, ani możliwa bez prawdziwego eksperckiego skakania. Pamiętaj, że emacsto też zadziała i z tego samego powodu.
RBerteig,
1
Dodatkowe punkty za sprytne użycie Vima! :)
Pierre-Antoine LaFayette
miło wiedzieć;)
schöppi
25

Należy zastosować ogólną technikę usuwania dziwnych nazw plików.

 ls -li

znaleźć numer i-węzła pliku, a następnie użyć.

find ./ -inum <number of file> -delete

Nie musisz pamiętać wszystkich specjalnych przypadków.

użytkownik51427
źródło
4
Nie wiedziałem, że findma moc usuwania plików.
zneak
Jest to również doskonałe do przechwytywania plików o nieznanych nazwach (zaczynających się od znaków spacji lub zawierających znaki spacji lub posiadających dodatkowe białe znaki na końcu), pod warunkiem, że masz dostęp do porządnego znalezienia GNU na swoim urządzeniu.
Olfan,
17

Chociaż wiem o sztuczce „rm - -filename”, zazwyczaj kiedy w jakiś sposób otrzymuję plik z wiodącym - w jego nazwie, którą chcę usunąć, uruchamiam menedżera plików GUI i robię to stamtąd, aby wyeliminować szansę błędów.

Heptyt
źródło
1
Może on wcale nie mieć GUI, więc może nie działać.
Wuffers
12
Jeśli byłoby to głupie i złe, może zasługuje na głosowanie, ale nie wierzę w głosowanie za odpowiedzią tylko dlatego, że „może nie działać”. Ta sugestia nie może wyrządzić szkody.
JT.WK,
4
Zawsze jest dowódca północy (lub inne menedżery plików oparte na przekleństwach) dla tych, którzy nie mają X.
thomasrutter
9

Jeśli chcesz mieć pewność:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf
Jan
źródło
4

Na wypadek, gdybyś był na Uniksie innym niż GNU, gdzie czujesz, że wróciłeś do epoki kamienia łupanego (brak --składni, brak -inumprzełącznika wyszukiwania, brak polecenia rozłączenia, edytor odmawia edycji katalogów itp.), Możesz nadal sobie pomóc:

find . -name '-rf' -print | xargs rm -i

Spowoduje to, że find prześle wszystkim potencjalnym kandydatom do rm, który z kolei poprosi o pozwolenie / odmowę dla każdego pliku, który zostanie podany.

Jeśli rmnawet nie obsługujesz -iprzełącznika (HP-UX 10.2 na PA-RISC 1.1?), Bądź bardziej ostrożny:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm
Olfan
źródło
co jeśli twój system nawet nie ma find?
Lie Ryan,
To byłoby naprawdę złe. Niestety, jeszcze nie spotkałem się z instalacją Uniksa. Czy możesz dać mi wskaźnik?
Olfan,
Zastanawiając się, moja odpowiedź byłaby właściwsza, gdyby pytanie dotyczyło błędu serwera. Super Użytkownicy nie są w stanie mieć tak starożytnych maszyn, jak te, o których mówię. A ci, którzy to robią, nauczyli się pomagać sobie. ;-)
Olfan
+1, @Olfan, w twojej obronie, ktoś właśnie spotyka starszego unixa w szafie gdzieś nadal potrzebuje zasobów, aby uczyć się wskazówek i sztuczek od ...
RBerteig
3

Wspierając odpowiedź Jleedev , poprawiłbym:

rm -i -- -rf

być w trybie interaktywnym i poprosić o potwierdzenie, aby naprawdę mieć pewność, co usuniesz. (chociaż rozwiązanie jest w porządku. to po prostu dla twojego spokoju)

Właściwie nawet użyj tego:

\rm -i -- -rf

aby mieć pewność, że nie używasz żadnych aliasów.

Haylem
źródło
2

Jak już sugerowano, zawsze korzystałem ze składni

rm -rf -- filename

kiedy musiałem usunąć plik z myślnikiem jako przedrostkiem, ponieważ - mówi do polecenia, że ​​nie szuka on żadnego innego parametru, tylko nazwy plików.

Mając to na uwadze, w celu ochrony mojego ważnego folderu przez przypadkowe usunięcie pliku zostałem użyty do utworzenia pustego pliku o nazwie po prostu -i, który zwykle jest umieszczany na górze listy plików podczas rozwiązywania * wyszukiwania. Więc polecenie

rm -rf *

kiedy wycinany w moim chronionym folderze zostanie rozbity, w trakcie wykonywania, w poleceniu:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

a powłoka, zamiast natychmiastowego usuwania wszystkiego, przestaje pytać o potwierdzenie (jak wymaga opcji -i).

Ghidello
źródło
+1 za -iwłamanie do nazwy pliku - „I” był sceptyczny, ale testuje się!
rymo
2

Ostatnim razem, gdy miałem ten problem, rozwiązałem go za pomocą:

pyton

import os

os.remove („- rf”)

Jono
źródło
1

Martin Clayton ma rację.

To jest bardzo proste i logiczne. Jeśli istnieją opcje to zawsze -XXXalbo --CCCCwięc jeśli umieścić ./lub pełna ścieżka -rfnie może być uważany jako opcja i będą traktowane jako normalny ciąg.

Działa z „wszystkimi” dziwnymi nazwami plików.

#pwd
/ tmp / TEST
#touch ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#
Louis
źródło
1

rm - -rf większość narzędzi GNU akceptuje - jako znacznik końca opcji

Konradowie
źródło