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/*
Cependant, s'il /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?
Modifier 1
supprimé "-type f
Modifier 2
Ajout d'une option non standard
-mindepth 1
afin d'empêcher le répertoire racine de recherche d'être supprimé (après avoir supprimé la-type f
limitation).la source
-type f
car il peut aussi y avoir des répertoires temporaires (bien que l'exemple de la question ne les explique pas, ils ne sont probablement pas là ...)-type f
ne supprimera que les fichiers normaux, donc les liens symboliques par exemple ne seront pas supprimés./tmp/our_cache
donc vous pourriez aussi bien le fairerm -r /tmp/our_cache
. Pendant que vous utilisez des options non standard, vous pouvez utiliser-mindepth 1
. Notez que contrairement àrm /tmp/our_cache/*
, il supprime également les sous-répertoires, leur contenu et les fichiers cachés.Vous pouvez rediriger l'erreur standard vers
/dev/null
pour ne pas l'imprimerla source
Une autre façon (bien que légèrement exagérée ...):
cela utilise
test
ou[
pour tester si la chaîne renvoyée par l'exécution d'unls
sur votre répertoire n'est pas vide. Ensuite, 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.la source
Si votre script utilise BASH, vous pouvez essayer:
Cela produira toujours une erreur s'il y a un "vrai" problème ou si un fichier est protégé (vous auriez alors besoin du
-f
modificateur derm
pour supprimer ce type de fichiers) mais évitera l'erreur quand aucun fichier n'est là.Si vous utilisez un autre shell que BASH pour vos scripts, comme zsh, ksh, vous pouvez essayer cette autre syntaxe qui pourrait être plus portable:
la source