web-dev-qa-db-fra.com

Supprimer les fichiers du répertoire sans erreur s'il est déjà vide

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?

34
Mark Amery

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.

53
depquid
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).

6
Hauke Laging

Vous pouvez rediriger l'erreur standard vers /dev/null pour ne pas l'imprimer

$  rm /tmp/our_cache/* 2>/dev/null
3
pradeepchhetri

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.

1
h3rrmiller