Dans le cadre d'un script de déploiement, je veux vider des éléments mis en cache de mon répertoire temporaire. J'utilise une commande comme:
rm /tmp/our_cache/*
Toutefois, si /tmp/our_cache
est vide (assez courant lors de la transmission rapide de nombreuses modifications à notre serveur de test), cela affiche le message d'erreur suivant:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Ce n'est pas un gros problème, mais c'est un peu moche et je veux réduire le rapport bruit/signal dans la sortie de ce script.
Qu'est-ce qu'un moyen concis sous Unix pour supprimer le contenu d'un répertoire sans recevoir de messages se plaignant que le répertoire est déjà vide?
Comme vous voulez probablement supprimer tous les fichiers sans invite, pourquoi ne pas simplement utiliser le -f
passer à rm
pour ignorer les fichiers inexistants?
rm -f /tmp/our_cache/*
Depuis la page de manuel:
-f, --force
ignore nonexistent files, never Prompt
De plus, s'il peut y avoir des sous-répertoires dans /tmp/our_cache/
et vous voulez que ceux-ci et leur contenu soient également supprimés, n'oubliez pas le -r
commutateur.
find /tmp/our_cache/ -mindepth 1 -delete
Modifier 1
supprimé "-type f
Modifier 2
Option non standard ajoutée -mindepth 1
afin d'empêcher la suppression du répertoire racine de recherche (après avoir pris le -type f
limitation à distance).
Vous pouvez rediriger l'erreur standard vers /dev/null
pour ne pas l'imprimer
$ rm /tmp/our_cache/* 2>/dev/null
Une autre façon (bien que légèrement exagérée ...):
[ ! -z "$(ls -A /tmp/our_cache/)" ] && rm -rf /tmp/our_cache/*
cela utilise test
ou [
pour tester si la chaîne renvoyée par l'exécution d'un ls
sur votre répertoire n'est pas vide. Alors si, et seulement si, cette chaîne n'est PAS vide, elle supprime tout sous votre répertoire.
REMARQUE: laisser le glob hors du ls
supprimera l'erreur de l'absence de fichiers.