J'exécute la commande suivante:
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
Je voudrais supprimer tous les dossiers sous le processing
dossier (le dossier de traitement ne doit jamais être supprimé).
La commande supprime également le processing
dossier. Comment limiter le script pour supprimer uniquement les dossiers sous ce dossier?
Réponses:
La façon la plus simple serait de simplement ajouter
-mindepth 1
, ce qui sautera la première hiérarchie de profondeur et supprimera ainsi votre répertoire parent.De plus, vous n'avez pas besoin d'un
-exec
appel supplémentaire àrm
, vous pouvez simplementdelete
directement les dossiers s'ils sont vides.S'ils ne sont pas vides:
Si vous êtes paresseux, vous pouvez également développer un caractère générique. Étant donné que
*
n'inclut pas le répertoire actuel par défaut ( sauf s'ildotglob
est défini ), vous pouvez également faire:Cependant, cela n'inclurait pas non plus les dossiers cachés, encore une fois en raison de l'
dotglob
option.la source
Le problème est que find renvoie le répertoire courant (.) Avec les autres répertoires, il supprime donc le dossier de traitement ainsi que les sous-répertoires. Un moyen rapide de contourner ce problème serait d’ajouter l’option
ce qui empêche la recherche de sortir le répertoire courant, et à son tour l'empêche d'être supprimé.
Cela fonctionnerait si vous exécutiez la commande dans le répertoire de traitement, afin de tenir compte du fait que vous utilisez un chemin absolu:
Et toute la commande serait:
la source
-name
fait référence au nom de base, il ne correspond jamais à une barre oblique. Vous devez probablement utiliser-path
.Déjà répondu, je voudrais encore énumérer une autre approche.
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
Cela exclura le répertoire supérieur (et également les sous-répertoires), et maintenant vous pouvez appliquer la commande que nous voulons appliquer dessus.
>> Options:
-mindepth 1: pour exclure le répertoire racine
-maxdepth 1: pour éviter d'analyser les sous-répertoires. (Pour un scénario particulier tel que questionné, vous n'en avez pas besoin).
-type d: répertorie uniquement les types de répertoire. Cette option devrait venir après les utilisations de mindepth maxdepth.
la source
-maxdepth 1
? Pourquoi-type d
deux fois? En quoi est-ce différent de la réponse acceptée?