Il tuo alias bash non è ben scritto (le virgolette singole non sono ben utilizzate). Invece dovrebbe essere:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Ora, personalmente non mi piacciono gli usi inutili delle pipe e xargs
, quindi il tuo alias sarebbe meglio scritto come:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
L' -type f
opzione per trovare solo i file (non directory, collegamenti, ecc.), L' -v
opzione rm
per essere così dettagliata (stampa ciò che sta eliminando). Alla +
fine così che find
correrm
venga con tutti i file trovati (genera solo un'istanza rm
invece di una per file).
Adesso da man bash
:
Per quasi tutti gli scopi, gli alias sono sostituiti da funzioni shell.
Invece di un alias, è meglio usare una funzione: commenta il tuo alias nel .bash_aliases
file (cioè, metti un #
davanti a quella linea), e nel file .bashrc
, metti questa funzione (ovunque nel file, alla fine va bene) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
Inoltre, come menzionato nell'altra risposta, è possibile utilizzare il -delete
comando per trovare. In questo caso, la tua rm~
funzione sarà:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
In effetti, puoi fare una bella funzione che prenderà un argomento, diciamo --dry-run
, che produrrà solo ciò che eliminerà:
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
}
Quindi utilizzare come:
rm~ --dry-run
per mostrare solo i file che verranno eliminati (ma non eliminarli) e quindi
rm~
quando sei felice con questo.
Adatta ed estendi alle tue esigenze!
Nota. Dovrai aprire un nuovo terminale per rendere effettive le modifiche.