#1 Le 30/09/2015, à 14:53
- T-800
Recherche la bonne commande avec Find pour demande particulière
Bonjour,
J'ai un serveur linux avec sur le home partagé des dossiers cache spécifique a des applications et j'aimerai les vider de façon général.
Par exemple dans le dossier nommé "perso" de chaque utilisateur, imaginons 2 dossiers suivant :
.config/
cache/
J'aimerai trouver une commande avec find qui recherche dans toute la partition /home les dossiers /perso/.config et /perso/cache et quand il les trouves, il doit effacer tous les fichiers & dossiers de façon récursive présent dans celui-ci mais pas le dossier lui même (juste vider ce qui est dedans).
Imaginons par exemple pour un utilisateur "toto" :
/home/toto/perso/.config/
/home/toto/perso/cache/
avec dedans des fichiers et des dossiers, il faut que la commande find supprime tout ce qu'il y a dedans mais que ça garde le dossier vide ".config" et le dossier "cache". idem pour tous les utilisateurs qui aurai ces dossiers.
Par contre tout ce qui est en dehors doit être conservé, donc si par exemple il y a des fichiers directement dans /home/toto ou même /home/toto/perso (mais pas ds le .config et cache) doivent rester.
Quelle serai la meilleur commande pour faire ça ?
Dernière modification par T-800 (Le 30/09/2015, à 14:55)
Hors ligne
#2 Le 30/09/2015, à 15:18
- pingouinux
Re : Recherche la bonne commande avec Find pour demande particulière
Bonjour,
Essaye ceci
cd /home/toto/perso
find .config cache -mindepth 1 -print
Si la liste est correcte, tu remplaces -print par -delete
find .config cache -mindepth 1 -delete
Voici le test que j'ai fait
$ cd /tmp/perso
$ tree -a /tmp/perso
/tmp/perso
├── autre
│ ├── fichier1
│ ├── fichier2
│ ├── fichier3
│ ├── fichier4
│ ├── fichier5
│ └── sous_repertoire
│ ├── a
│ ├── b
│ ├── c
│ └── d
├── cache
│ ├── fichier1
│ ├── fichier2
│ ├── fichier3
│ ├── fichier4
│ ├── fichier5
│ └── sous_repertoire
│ ├── a
│ ├── b
│ ├── c
│ └── d
└── .config
├── fichier1
├── fichier2
├── fichier3
├── fichier4
├── fichier5
└── sous_repertoire
├── a
├── b
├── c
└── d
6 directories, 27 files
find .config cache -mindepth 1 -delete
$ tree -a /tmp/perso
/tmp/perso
├── autre
│ ├── fichier1
│ ├── fichier2
│ ├── fichier3
│ ├── fichier4
│ ├── fichier5
│ └── sous_repertoire
│ ├── a
│ ├── b
│ ├── c
│ └── d
├── cache
└── .config
4 directories, 9 files
Hors ligne
#3 Le 30/09/2015, à 20:41
- T-800
Re : Recherche la bonne commande avec Find pour demande particulière
Merci pour ta réponse pingouinux mais ce n'est pas bon, chez toi ça marche car dans ton exemple tu es directement situé a un niveau au dessus du répertoire a vider.
il y a 500 utilisateurs sur le serveur, il faut que la commande puisse fonctionner sans compter le nombre de niveau. (je ne peux pas me mettre dans le dossier perso de chacun des 500 utilisateurs et retaper ta commande tu comprend)
Prenons par exemple cette structure simple mais qui permet de tester quand même si ta commande pourrai convenir sur le serveur :
(a et b sont a la racine du home)
├── a
│ └── .config
│ └── fgsdfsgdfgs
└── b
└── .config
└── fgsdfsgdfgs
si je me place dans le home (cd /home) et qu'ensuite je tape ta commande :
find .config -mindepth 1 -delete
le résultat :
le message suivant : find: ".config": Aucun fichier ou dossier de ce type
et au niveau du résultat :
exactement la même chose (rien n'est effacé)
Alors qu'il faut ça :
├── a
│ └── .config
└── b
└── .config
pour être précis, si le compte utilisateur s'appelle "pierre.f" sur le serveur le dossier .config correspondra exactement a ça :
/home/p/pierre.f/perso/.config/
Une idée ? (il serai préférable de ne pas compter les niveaux sinon il y a un risque d'effacement de dossier qui ne doit pas l'être suivant l'emplacement depuis lequel la commande est lancé.
Il faudrait une commande qui fait le rôle suivant :
"Rechercher dans le home tous les dossiers qui s'appelle exactement ".config" et pour chaque dossier trouvé avec ce nom, effacer le contenu a l'intérieur de ceux-ci mais sans effacer le dossier lui même (il sera alors toujours présent mais vide)."
Dernière modification par T-800 (Le 30/09/2015, à 20:54)
Hors ligne
#4 Le 30/09/2015, à 21:17
- T-800
Re : Recherche la bonne commande avec Find pour demande particulière
edit :
Avec la commande suivante, j'ai la liste exact des fichiers que je dois effacer mais je n'arrive a coupler le résultat avec la commande d'effacement, si je remplace le "ls" par un "rm", ça effacera aussi le dossier ou ce trouve les fichiers (.config) dans notre exemple :
find /home -name .config -exec ls {} \;
Hors ligne
#5 Le 30/09/2015, à 21:56
- soshy
Re : Recherche la bonne commande avec Find pour demande particulière
Et si tu tente :
find /home -name .config -exec rm -rf {}/* \;
A essayer avec précaution...
Hors ligne
#6 Le 30/09/2015, à 22:57
- T-800
Re : Recherche la bonne commande avec Find pour demande particulière
Et si tu tente :
find /home -name .config -exec rm -rf {}/* \;
A essayer avec précaution...
ça ne fonctionne pas, il n'y a rien qui s'efface avec cette commande, il doit y avoir un problème par rapport au {}/*
Hors ligne
#7 Le 01/10/2015, à 05:37
- Watael
Re : Recherche la bonne commande avec Find pour demande particulière
salut,
si .config et cache sont toujours sous /home/<username>/, un simple rm -rf /home/*/{.config,cache}/ suffit.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 01/10/2015, à 06:24
- pingouinux
Re : Recherche la bonne commande avec Find pour demande particulière
Tu peux aussi essayer ceci
shopt -s globstar
find **/.config -mindepth 1 -ls
et si c'est correct
find **/.config -mindepth 1 -delete
Ajouté :
Et pour traiter plusieurs répertoires
find **/{.config,cache} -mindepth 1 -delete
Dernière modification par pingouinux (Le 01/10/2015, à 06:58)
Hors ligne
#9 Le 01/10/2015, à 07:08
- moko138
Re : Recherche la bonne commande avec Find pour demande particulière
si .config et cache sont toujours sous /home/<username>/, un simple
rm -rf /home/*/{.config,cache}/ suffit.
D'une part, il me semble qu'il manque un astérisque à la fin de cette commande,
d'autre part, vu la structure décrite à la fin du message de 21h41
/home/p/pierre.f/perso/.config/
il me semble que
sudo rm -rf /home/*/*/*/.config/*; sudo rm -rf /home/*/*/*/cache/*
serait plus approprié.
-----------
T-800 : l'absence de point devant cache/, c'est une faute de frappe ou c'est voulu ?
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
En ligne
#10 Le 01/10/2015, à 07:22
- MicP
Re : Recherche la bonne commande avec Find pour demande particulière
EDIT : Grillé par moko138 pour l'astérisque (j'étais en train de rédiger mon message)
=======
Si ce n'est qu'elle cherche aussi à supprimer les répertoires cache et .config, et qu'elle n'utilise pas find, (comme demandé dans le titre),
je trouve celle de Watael simple et efficace.
Il ne lui manquerait qu'un astérisque à la fin :
rm -rf /home/*/{.config,cache}/*
=======
Pour find, on pourrait aussi utiliser les opérations binaires => … -name .config -or -name cache …
Dernière modification par MicP (Le 01/10/2015, à 07:27)
Hors ligne
#11 Le 01/10/2015, à 08:39
- T-800
Re : Recherche la bonne commande avec Find pour demande particulière
Ok merci a vous, j'ai le résultat qu'il faut, quand je disais "find" c'est parceque je pensais qu'on était obligé d'en utiliser un mais évidemment j'accepte aussi sans find si le résultat revient au même.
voici donc la solution qui marche (j'ai pas testé ceux avec les find, ça doit être bon aussi je pense) :
rm -rf /home/*/*/perso/{.config,cache}/*
Hors ligne