J'ai mon dossier de base (appelons-le base).
J'ai un tas de dossiers à l'intérieur, dispersés à différentes profondeurs dans ces dossiers sont des dossiers de cache.
Je souhaite supprimer tous les fichiers des dossiers de cache, mais pas les dossiers eux-mêmes.
J'ai essayé
cd base
#then one of...
Sudo rm -rf cache/*
Sudo rm -rf *cache/*
Sudo rm -rf cache*/*
Sudo rm -rf *cache*/*
Mais je ne fais que deviner, quelle serait la bonne commande?
Dans bash, vous pouvez activer globstar et utiliser **
pour faire correspondre les répertoires de manière récursive.
shopt -s globstar
echo rm -rf ./**/*cache*/*
Voir Pattern Matching
Ceci supprimera récursivement tous les fichiers des dossiers nommés cache
, en commençant par le dossier base
. Les dossiers cache
seront eux-mêmes intacts, mais tous les fichiers qu'ils contiennent seront supprimés.
find base -ipath "*/cache/*" -type f -delete
Vous pouvez utiliser la puissante commande de recherche extrêmement.
Je voudrais utiliser quelque chose comme ça:
find . -iname *cache* -ok rm -rf {} \;
Maintenant, laissez-moi vous l'expliquer. Find est le nom de l'application, elle propose de nombreuses options, mais pour vous, vous n'en aurez pas besoin beaucoup.
Le .
signifie regarder dans ce répertoire courant. Cela signifie que vous devez être dans le bon répertoire pour commencer. Je suppose que pour vous c'est ~
-iname
signifie rechercher dans mon nom ne respectant pas la casse.
*cache*
signifie que le nom doit contenir le cache.
Maintenant, la partie suivante est importante.
-ok
signifie exécuter les commandes qui suivent, mais comme moi si je veux le faire en premier. Ceci peut être remplacé par -exec
mais je ne le conseillerais pas. Cela effacerait des choses sans vous le dire et vous ne le voulez pas.
Ok, donc la ligne suivante (qui contient tout ce que -ok
exécute) est rm -rf {} \;
Le rm -rf
J'espère est explicite. Le {}
est essentiellement un espace réservé pour le nom du fichier trouvé. Le \;
à la fin signifie simplement que c'est la fin de cette ligne.
J'espère que cela à du sens.
Je conseille d'exécuter la commande find sans que tout soit correct, y compris -ok
. Il va commencer par afficher une liste de tous les fichiers de cache et vous pouvez les consulter. Ajoutez ensuite la section -ok
et commencez à craquer!
Il suffit de remplacer basedir par le chemin du répertoire de base que vous souhaitez supprimer
$ find basedir -type f -delete
Si vous vous sentez plus à l'aise avant de vous rendre dans votre répertoire de base, alors:
$ cd basedir
$ find . -type f -delete