Votre alias bash n'est pas bien écrit (les guillemets simples ne sont pas bien utilisés). Au lieu de cela, il devrait être:
alias rm~='find . -name "*~" -print0 | xargs -0 /bin/rm -f'
Maintenant, personnellement, je n'aime pas les utilisations inutiles des tuyaux et xargs
, donc votre alias serait mieux écrit comme suit:
alias rm~='find . -name "*~" -type f -exec /bin/rm -fv -- {} +'
L' -type f
option pour ne rechercher que les fichiers (pas les répertoires, les liens, etc.), l' -v
option rm
pour être verbeux (imprime ce qu'il supprime). Le +
à la fin de sorte qu'il find
s'exécute rm
avec tous les fichiers trouvés (ne génère qu'une seule instance de rm
, au lieu d'une par fichier).
Maintenant de man bash
:
Dans presque tous les cas, les alias sont remplacés par des fonctions shell.
Au lieu d'un alias, il est préférable d'utiliser une fonction: commentez votre alias dans le .bash_aliases
fichier (c'est-à-dire, mettez un #
devant cette ligne), et dans le fichier .bashrc
, mettez cette fonction (n'importe où dans le fichier, à la fin, c'est bien) :
rm~() {
find . -name "*~" -type f -exec /bin/rm -fv -- {} +
}
En outre, comme le mentionne l'autre réponse, vous pouvez utiliser la -delete
commande pour rechercher. Dans ce cas, votre rm~
fonction sera:
rm~() {
find . -name "*~" -type f -printf "Removing file %p\n" -delete
}
En fait, vous pouvez créer une fonction sympa qui prendra un argument, disons --dry-run
, qui ne produira que ce qu'il supprimera:
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
}
Utilisez ensuite comme:
rm~ --dry-run
pour afficher uniquement les fichiers qui seront supprimés (mais pas les supprimer), puis
rm~
lorsque vous êtes satisfait de cela.
Adaptez-vous et étendez-vous à vos besoins!
Remarque. Vous devrez ouvrir un nouveau terminal pour que les modifications prennent effet.
find -type f -name '*~' -delete
(arme de choix, en plusgit clean -dfx .
)*~
est développé par le shell avant d'être affecté à votre alias. La mission réelle est:Je suggère d'utiliser des fonctions au lieu d'alias, ceux-ci sont beaucoup plus puissants et plus faciles à gérer en ce qui concerne les guillemets.
Pendant que nous y sommes, supprimez le superflu
.
(le répertoire courant est impliqué si aucun paramètre n'est donné) et arrêtez d'en abuserxargs
car une-delete
option existe déjà.L'
-ls
option est facultative, mais l'ajout vous montrera quels fichiers ont été supprimés.la source
.bash_aliases
, mais je les mets généralement directement dans mon.bashrc
.