Ihr Bash-Alias ist nicht gut geschrieben (die einfachen Anführungszeichen werden nicht gut verwendet). Stattdessen sollte es sein:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Nun, ich persönlich mag keine nutzlosen Verwendungen von Pfeifen und xargs
deshalb wäre Ihr Alias besser geschrieben als:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
Die -type f
Option, um nur Dateien zu finden (keine Verzeichnisse, Links usw.), die -v
Option rm
, um ausführlich zu sein (druckt aus, was gelöscht wird). Das läuft also +
am Ende mit allen gefundenen Dateien (erzeugt nur eine Instanz von , anstatt eine pro Datei).find
rm
rm
Jetzt von man bash
:
Für fast jeden Zweck werden Aliase durch Shell-Funktionen ersetzt.
Anstelle eines Alias ist es besser, eine Funktion zu verwenden: Kommentieren Sie Ihren Alias in der .bash_aliases
Datei (dh setzen Sie ein #
vor diese Zeile), und .bashrc
setzen Sie diese Funktion in die Datei (irgendwo in der Datei, am Ende ist alles in Ordnung). :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
Wie in der anderen Antwort erwähnt, können Sie den -delete
Befehl zum Suchen verwenden. In diesem Fall ist Ihre rm~
Funktion:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
Tatsächlich können Sie eine coole Funktion erstellen, die ein Argument übernimmt --dry-run
, das beispielsweise nur das ausgibt, was sie löscht:
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
}
Dann verwenden Sie als:
rm~ --dry-run
um nur die zu löschenden Dateien anzuzeigen (aber nicht zu löschen) und dann
rm~
wenn du damit zufrieden bist.
Passen Sie sich Ihren Bedürfnissen an und erweitern Sie sie!
Hinweis. Sie müssen ein neues Terminal öffnen, damit die Änderungen wirksam werden.