Jak mogę usunąć plik lub katalog o nazwie „\”?

20

Używam terminala na maszynie Ubuntu i jest plik, który chciałbym usunąć. Nazwa pliku to \(tylko odwrotny ukośnik).

Teraz zwykle robiłbym to

rm filename

Jeśli jednak to zrobię rm \, wydaje mi się, że próbuję napisać polecenie wieloliniowe.

Jak mogę usunąć ten plik? Wiem, że mogłem po prostu użyć systemu plików GUI, ale to nie jest bardzo wydajne.

Jak mogę usunąć (w terminalu) plik o nazwie \?

Nosrettap
źródło
1
Dlaczego masz taki plik? (To nawet nie pozwala mi umieścić tego w codebloku tutaj w tym komentarzu!)
AJMansfield
7
Więcej zabawy polega na usuwaniu pliku o nazwie <BEL>, czyli Ctrl-G, jeśli dobrze pamiętam. Za każdym razem to zrobić ls sygnały dźwiękowe klawiatury na ciebie aż do ciebie (a) odkrył niewidzialny plik; oraz (b) ustalił, jak usunąć plik zawierający tylko jeden znak niedrukowalny w nazwie.
Pieter Geerkens
1
Co ważniejsze, jak usunąć plik o nazwie „/”?
Curt
1
@Curt fsck. Poważnie. Jeśli plik o nazwie /istnieje, twój system plików jest uszkodzony.
zwolnić
2
Plik zawsze mi się podobał *
RBerteig,

Odpowiedzi:

48

Użyj rm \\(ucieczka przed ukośnikiem innym ukośnikiem). Zauważ, że to działa również Podobnie, dla katalogów o nazwach \(stosując albo rmdir, albo rmz -rflagą).

Przykład:

> demo mkdir
> demo cd
> dotknij \\
> ls -l
łącznie 0
-rw ------- 1 użytkownik Hennes 0 lipca 29 20:25 \
> rm \\
> ls -l
łącznie 0
Hennes
źródło
3
Lub zgodnie z tą samą zasadą rm '\'(ale nie rm "\" ).
evilsoup
2
@evilsoup, aby zapewnić dodatkowe wyjaśnienie, \ znak ten jest używany jako znak zmiany znaczenia w ciągach rozdzielanych podwójnymi cudzysłowami. Powiedzenie rm "\"zostanie sparsowane do niezamkniętego łańcucha, ponieważ drugi znak cudzysłowu jest używany ze znakiem zmiany znaczenia (a zatem będzie analizowany jako sam znak podwójnego cudzysłowu, a nie na końcu łańcucha). Zatem terminal będzie czekał, aż zakończysz łańcuch innym ". Równoważną metodą użycia tutaj podwójnych cudzysłowów byłaby rm "\\"(która jest bezpośrednio równoważna zarówno z, jak rm '\'i rm \\ , jak już potwierdziłeś).
Przełom
15

Ogólna taktyka ręcznego usuwania plików z niezręcznymi znakami w ich nazwach to

rm -i ./*

Spowoduje to monit o wybranie, czy usunąć każdy plik w katalogu.

zwol
źródło
3
Albo singiel był pojedynczym char. rm -i ./?
Hennes
1
Tak. Jeśli potrafisz napisać bardziej szczegółowy glob niż ./*, zawsze jest to dobry pomysł, szczególnie gdy robisz coś destrukcyjnego.
zwol
4
+1 za ./
prefiksowanie globu
12

Można również odłączyć, odwołując się do i-węzła pliku

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 
joshbaptiste
źródło
0

Najpierw sprawdź i-węzeł pliku. ls -li

137791 -rw-rw-r--. 1 svr svr 366 11 marca 15:57

i-węzeł „\” to „137791, a następnie użyj polecenia find, aby usunąć„ \ ”z numerem i-węzła.

odnaleźć . -inum 137791 -exec rm -i {} \;

rm: usunąć zwykły plik `./ \ '? tak

„\” zostanie wówczas usunięte.

BALVINDER SINGH
źródło