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.


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

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.


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ć).


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.


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.


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

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

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.


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).


+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”)


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
#

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.