Mam plik o nazwie ~ (tylda) w moim katalogu domowym

46

Właśnie zauważyłem, że mam plik o nazwie ~w moim ~katalogu.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Jakiś pomysł jak mogę mvczy rmnie?

scrrr
źródło
Spróbuj usunąć go według i-node.
gronostaj

Odpowiedzi:

55

Całkiem doskonałe rozwiązanie, jeśli chodzi o pliki, których nie można normalnie usunąć:

ls -il 

Pierwsza kolumna pokazuje numer i-węzła plików.

find . -inum [inode-number] -exec rm -i {} \;

Spowoduje to usunięcie pliku z określonym numerem i-węzła po weryfikacji.

Ściśnij
źródło
To zadziałało. Być może rozwiązanie rici też jest dobre, ale nie próbowałem. Wielkie dzięki!
scrrr
Tak, odpowiedź Rici też jest dobra. I myślę, że jest lepiej, ponieważ jest prostszy.
Andrey Regentov,
fajnie, +1. Zmieniłem twoją odpowiedź na użycie -deletezamiast -exec, a potem zdałem sobie sprawę, że używasz tego, rm -ico jest dobrym pomysłem, więc wycofałem się. Przepraszam.
terdon
Nie martw się Zawsze się cieszę, gdy ktoś uzna moje odpowiedzi za godne swojego czasu :)
Squeezy,
Ta odpowiedź nie działała dla mnie. Ubuntu 14.04 LTS
KhoPhi
46

Powinieneś być w stanie odnieść się do tego pliku jako ~/~(bez cudzysłowów), ponieważ rozszerzenie tyldy stosuje tylko tyldy ( ~) na samym początku słowa.

rici
źródło
17
także, idąc do folderu iz rm ./~tego samego powodu, co powiedziałeś
Carlos Campderrós,
@ CarlosCampderrós zastanawia się nad odpowiedzią. Uznałbym to za „najlepsze” i najprostsze rozwiązanie w porównaniu z innymi odpowiedziami, ponieważ ./~dosłownie oznacza „plik lub folder o nazwie ~w bieżącym katalogu” . Nie ma hacków takich jak znaki specjalne lub odwołania do i-węzłów.
ADTC
@ ADTC: w obronie mojej odpowiedzi nie wymaga zmiany CWD, podczas gdy używanie ./~. Po pięciu latach moja pamięć jest trochę rozmyta, ale myślę, że właśnie dlatego zasugerowałem, ~/~a nie bardziej normalne ./~: Pytanie dotyczy konkretnie „pliku o nazwie ~z katalogu domowego [OP]] ; nie „w bieżącym katalogu”.
rici
@rici To ma sens i w kontekście pytania byłoby właściwe. Lubię jednak widzieć odpowiedzi ogólne lub wypowiadać się w pierwszej kolejności, zanim wyjaśnię konkretny przypadek pytania. To moja obrona: D
ADTC
20

Cytuj ( rm '~') lub Escape ( rm \~).


Zawsze jest to jeden z nich (również np. $) Lub „dodaj”, --aby zapobiec interpretacji nazwy pliku jako argumentu: rm -- -iusuwa plik o nazwie -i; przydatne również, rm -- *gdy chcesz usunąć wszystkie pliki w bieżącym katalogu: Nieprzypadkowo rm -f *tylko dlatego, że plik ma taką nazwę.

Daniel Beck
źródło
Hm, nie, to nie wydaje się działać. Próbowałem pojedynczych cytatów, ucieczki i backticksa ... on nie odbiera pliku. Mówi, że albo nie istnieje, albo interpretuje ~ jako katalog domowy ..
scrrr,
@scrrr Jaka jest twoja powłoka?
Daniel Beck
grzmotnąć. Ale problem rozwiązany w sposób inode.
scrrr
@scrrr Cieszę się, że problem został rozwiązany, ale teraz chcę wiedzieć, dlaczego ucieczki bash nie działają w twoim systemie tak samo jak w moim.
Isaac Rabinovitch,
1
Ostrożny. --zatrzymuje tylko interpretację następujących argumentów jako parametrów - nie uniemożliwia powłoce wykonania ekspansji (np. *), co dzieje się tutaj. (Wiem, że zasugerowałeś to jako alternatywę dla innych sytuacji, ale ostrzeżenie byłoby dobre.)
Bob