Dzięki manewrowi z kością przypadkowo utworzyłem katalog o nazwie (na przykład) -A i ostatecznie wypełniłem go plikami.
Chcę usunąć wspomniany katalog. Próbowałem:
rmdir -- -A
ale wtedy mówi mi, że w katalogu nadal są pliki. I nie mogę wymyślić, jak wprowadzić cd do katalogu, aby usunąć te pliki.
Co powinienem zrobić, aby pozbyć się tego kłopotliwego katalogu?
unix
unix-shell
Kate Bertelsen
źródło
źródło
Odpowiedzi:
Użyj - na każdym poleceniu.
źródło
Możesz umieścić ./ przed plikiem - w ten sposób rm lub rmdir nie będą zachowywać się tak, jakby nazwa pliku była flagą opcji.
Możesz także wydać opcję - która każe rm zachowywać się tak, jakby wszystko po nim - była nazwą pliku i że nie powinna przetwarzać więcej opcji. Mogą istnieć funky starsze wersje rm, które tego nie przestrzegają, chociaż moje zoo starych uniksów stało się dość małe, więc nie mogę ci powiedzieć, które z nich lub czy są wersje, które nie rozumieją -.
Powinieneś przyzwyczaić się do umieszczania ./ przed nazwami, gdy i tak usuwasz - nigdy nie wiesz, czy w katalogu znajduje się plik o nazwie -r lub -rf. Możesz powiedzieć, że zawsze powinieneś używać - ale uważam, że ./ jest bardziej naturalny, ponieważ wyraźnie stwierdza, że „chcę usunąć pliki z tego katalogu, a nie cokolwiek * się dzieje z globem”
źródło
Zmień nazwę, a następnie postępuj normalnie:
źródło
rmdir nie usunie katalogu z niczym w nim zawartym. „rm -rf” będzie. rmdir jest znacznie bezpieczniejszy niż „rm -rf”. Odpowiedź Moo jest prawdopodobnie najlepsza.
źródło
Powyższe polecenie działa dla mnie.
źródło
Inną metodą byłoby usunięcie za pomocą i-węzła (działa to w przypadku plików / katalogów z innymi znakami, które trudno usunąć za pomocą samego rm).
źródło
-exec
nie ucieka od nazwy i nie musi; argument przekazany przez jedno zexec*
syscalli jest faktyczną nazwą. Jedynie dane wejściowe powłoki wymagają specjalnych znaków, takich jak gwiazdka średnika spacji itp., Aby uzyskać od powłoki prawidłową (BEZ cudzysłowów) rzeczywistą nazwę. To powiedziawszy,find -exec rm -f {}
działa tylko dla pliku, a nie dla katalogu wymaganego dla tego Q;find -exec rm -rf {}
obsługuje katalog, a nawet katalog niepusty, ale pomijaniefind
i wykonywanierm -rf ./-A
jest znacznie prostsze.find może usunąć katalog w ten sposób:
źródło
Próbowałem usunąć katalog o nazwie
-p
. Odpowiedź @ Moo osiągnęła to, czego nie byłem w stanie zrobićrm ./-p
, co jest szeroko dostępne na wielu stronach internetowych po wyszukiwaniu w Google.Inną metodą jest użycie numeru i-węzła. Użyłem opisanej tutaj metody:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
Krótko mówiąc, użyj następujących poleceń:
find
polecenia, używając-exec rm -irf
argumentu dla pliku lub-exec rm -ifdr
katalogu.Upewnij się, że używasz
-f
flagi wewnątrz, w przeciwnym razie bash narzeka na brak możliwości znalezienia katalogu lub pliku.Testowane na:
źródło
rm -d
nigdy i zwykle nie-f
przy wywoływaniufind
, ale potrzebujesz-r
katalogu i nie potrzebujesz go do pliku. Nawet po skorygowaniu ta metoda jest nadal niezdarna i gorsza. W przypadku niepustego katalogu wystarczy zrobićrm -fr ./-p
- to r dla katalogu if w zależności od ustawień uprawnień.