Twój alias bash nie jest dobrze napisany (pojedyncze cudzysłowy nie są dobrze używane). Zamiast tego powinno być:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Teraz osobiście nie lubię bezużytecznych zastosowań potoków xargs
, więc Twój alias lepiej byłoby napisać jako:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
-type f
Opcja, tak aby znaleźć tylko pliki (nie katalogi, linki, itp), The -v
opcję rm
, tak aby być rozwlekły (drukuje się, co to za kasowanie). Na +
końcu, więc find
działa rm
ze wszystkimi znalezionymi plikami (spawnuje tylko jedną instancję rm
, zamiast jednej na plik).
Teraz z man bash
:
W prawie każdym celu aliasy są zastępowane przez funkcje powłoki.
Zamiast aliasu lepiej jest użyć funkcji: skomentuj swój alias w .bash_aliases
pliku (tj. Umieść #
przed tym wierszem), a w pliku .bashrc
umieść tę funkcję (w dowolnym miejscu pliku, na końcu jest w porządku) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
Ponadto, jak wspomniano w innej odpowiedzi, możesz użyć -delete
polecenia, aby znaleźć. W takim przypadku Twoją rm~
funkcją będzie:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
W rzeczywistości możesz stworzyć fajną funkcję, która weźmie argument, powiedzmy --dry-run
, który wyświetli tylko to, co usunie:
rm~() {
case "$1" in
"--dry-run")
find . -name "*~" -type f -printf "[dry-run] Removing file %p\n"
;;
"")
find . -name "*~" -type f -printf "Removing file %p\n" -delete
;;
*)
echo "Unsupported option \`$1'. Did you mean --dry-run?"
;;
esac
}
Następnie użyj jako:
rm~ --dry-run
wyświetlać tylko pliki, które zostaną usunięte (ale ich nie usuwać), a następnie
rm~
kiedy jesteś z tego zadowolony.
Dostosuj się i rozszerz do swoich potrzeb!
Uwaga. Będziesz musiał otworzyć nowy terminal, aby zmiany odniosły skutek.
find -type f -name '*~' -delete
(poza tym broń z wyborugit clean -dfx .
)*~
zostanie rozszerzony przez powłokę, zanim zostanie przypisana do twojego aliasu. Rzeczywiste zadanie to:Sugeruję używanie funkcji zamiast aliasów, są one znacznie potężniejsze i łatwiejsze w obsłudze w odniesieniu do cudzysłowów.
W tym momencie usuń zbędne
.
(bieżący katalog jest domyślny, jeśli nie podano żadnych parametrów) i przestań nadużywać,xargs
ponieważ-delete
opcja już istnieje.-ls
Opcja nie jest obowiązkowe, ale dodanie go pokaże które pliki zostały usunięte.źródło
.bash_aliases
, ale zwykle umieszczam je prosto w moim.bashrc
.