Oczywiste rozwiązanie generuje kod wyjścia 1:
bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1
Jednym z możliwych rozwiązań będzie pominięcie „.” i „..”, ale usuwają tylko pliki, których nazwy są dłuższe niż 3 znaki:
bash$ rm -f .??*
Odpowiedzi:
Powinien złapać wszystkie przypadki. . ?? * będzie pasować tylko do ponad 3-znakowych nazw plików (jak wyjaśniono w poprzedniej odpowiedzi), a. [^.] Będzie przechwytywał dowolne dwa znaki (inne niż ...).
źródło
zsh
. Jakieś sugestie?zsh
domyślnie pusta wieloznaczny mecz jest traktowany jako błąd; podczas gdy zbash
nim jest po prostu przekazywane bez zmian. Abyzsh
zachować się tak samo, możesz użyć poleceniaunsetopt nomatch
To pasuje do wszystkich plików w bieżącym katalogu, które zaczynają się od a,
.
i usuwa je rekurencyjnie. Pliki ukryte w nie ukrytych katalogach nie są dotykane.W przypadku, gdy naprawdę chcesz usunąć wszystko z katalogu,
find -delete
wystarczy.źródło
.
najlepszym sposobem jest prawdopodobnie:
zmień rm na ls -l, jeśli chcesz tylko zobaczyć, co zostanie usunięte, aby uzyskać szczegółowe informacje, możesz dodać opcję -v do rm
ps. nie zapomnij o zakończeniu „\;”
źródło
źródło