Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Mercredi, 25 Mai 2016 18:35:12 +0200 Hugues MORIN écrivait : Bonsoir Hugues, > Je vais faire quelques test et choisir celle qui m'ira le mieux. > La simplicite du rm -rf !(index.php) me palit assez. Ne pas oublier que l'option !(regexp) n'est active qu'avec l'option extglob. shopt - voir toutes les valeurs shopt extglob - voir la valeur du paramètre spécifié (extglob en l'occurence) shopt -s extglob - avec un "s" comme dans "set" shopt -u extglob - avec un "u" comme dans "unset" un essai avec peut être utile. l'option "-d" permet de ne pas "plonger" dans les répertoires. et on peut s'amuser avec des expressions à la noix comme : . ls -d !(*.php) . ls -d !([iI]*) . ... > > > Cordialement > Hugues Bon amusement. Jean-Marc pgpJnO_TOmpCH.pgp Description: PGP signature
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Bonjour Merci pour toutes ces infos :D Je vais faire quelques test et choisir celle qui m'ira le mieux. La simplicite du rm -rf !(index.php) me palit assez. Cordialement Hugues Le 25 mai 2016 à 18:00, Yannick a écrit : > Le 24/05/2016 12:08, Hugues MORIN a écrit : > > Bonjour a tous > > > > > > > > J'ai besoin de supprimer tout le contenu d'un repertoire SAUF le fichier > > index.php > > > > Il me semblai que cela aurai du le faire: > > find /var/www/monsite/cache ! -name 'index.php' -exec rm -rf {} \; > > > > mais en pratique cela supprime aussi le repertoire "cache" > > > > La syntaxe me semble correcte mais comment faire pour ecarter le dossier > > "cache" de la suppression? > > > > > > Cette solution n'est peut etre pas la bonne pour ce que je veux faire. > > En avez-vous une autre qui fonctionne? > > > > > > Merci > > > > Cordialement > > Hugues > > > > Bonsoir, > > Je sais je vais être un peu bourrin dans ma proposition. > > Avec ton gestionnaire de fichier préféré tu vas dans le dit répertoire > puis [Ctrl]+[A] > puis tu cherches ton fichier 'index.php, tu lui fais un [Ctrl]+ clic droit > puis tu fais [Suppr] > > Et voilà le tour est joué. > > Je sais ce n'est pas de la ligne de commande mais bon c'est très > efficace aussi ;-) > > Amitiés > > -- > Yannick VOYEAUD > Nul n'a droit au superflu tant que chacun n'a pas son nécessaire > (Camille JOUFFRAY 1841-1924, maire de Vienne) > http://www.voyeaud.org > Créateur CimGenWeb: http://www.francegenweb.org/cimgenweb/ > Journées du Logiciel Libre: http://jdll.org > Généalogie en liberté avec Ancestris http://www.ancestris.org > >
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Le 25 mai 2016 à 16:00, Yannick a écrit : > Bonsoir, > > Je sais je vais être un peu bourrin dans ma proposition. > > Avec ton gestionnaire de fichier préféré tu vas dans le dit répertoire > puis [Ctrl]+[A] > puis tu cherches ton fichier 'index.php, tu lui fais un [Ctrl]+ clic droit > puis tu fais [Suppr] > > Et voilà le tour est joué. > > Je sais ce n'est pas de la ligne de commande mais bon c'est très > efficace aussi ;-) > > Amitiés bonsoir, la manip' que tu proposes supprime uniquement le fichier index.php, alors que l'OP voulait à l'inverse supprimer tout sauf le fichier index.php je suis pour une utilisation de ligne de commande ou interface graphique en fonction des cas sur poste de travail, c'est clair ;) ceci dit, /var/www/monsite/cache ça sent le serveur web...beaucoup de serveurs web sont installés sur des machines dépourvues d'interface graphique pour des raisons d'économies de mémoire et de proc, et aussi pour des raisons de sécurité (moins il y a de soft installé, moins il y a de failles potentielles) bonne fin de journée __ Éric Dégenètais Henix http://www.henix.com http://www.squashtest.org
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Le 24/05/2016 12:08, Hugues MORIN a écrit : > Bonjour a tous > > > > J'ai besoin de supprimer tout le contenu d'un repertoire SAUF le fichier > index.php > > Il me semblai que cela aurai du le faire: > find /var/www/monsite/cache ! -name 'index.php' -exec rm -rf {} \; > > mais en pratique cela supprime aussi le repertoire "cache" > > La syntaxe me semble correcte mais comment faire pour ecarter le dossier > "cache" de la suppression? > > > Cette solution n'est peut etre pas la bonne pour ce que je veux faire. > En avez-vous une autre qui fonctionne? > > > Merci > > Cordialement > Hugues > Bonsoir, Je sais je vais être un peu bourrin dans ma proposition. Avec ton gestionnaire de fichier préféré tu vas dans le dit répertoire puis [Ctrl]+[A] puis tu cherches ton fichier 'index.php, tu lui fais un [Ctrl]+ clic droit puis tu fais [Suppr] Et voilà le tour est joué. Je sais ce n'est pas de la ligne de commande mais bon c'est très efficace aussi ;-) Amitiés -- Yannick VOYEAUD Nul n'a droit au superflu tant que chacun n'a pas son nécessaire (Camille JOUFFRAY 1841-1924, maire de Vienne) http://www.voyeaud.org Créateur CimGenWeb: http://www.francegenweb.org/cimgenweb/ Journées du Logiciel Libre: http://jdll.org Généalogie en liberté avec Ancestris http://www.ancestris.org
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
> >> Mais à partir du moment où tu supprimes un répertoire, où diable >> voudrais-tu alors que se trouvent les fichiers qu'il contenait ? Il >> faut bien que ces fichiers se trouvent dans un répertoire, non ? Si >> j'ai un fichier /a/b/f1, à partir du moment où je supprime le >> répertoire « b », je ne vois pas trop où pourrait se trouver le >> fichier « f1 », à moins de le déplacer ailleurs bien sûr. Du coup, je >> ne comprends ni la question ni son intérêt mais bon c'est pas >> grave. ;) > > "tout est fichier" ;) > > Tu ne peux pas supprimer l'inode du répertoire s'il n'est pas vide. La > commande rmdir ne fonctionne que sur un répertoire vide. > > Si tu supprime le répertoire avec rm en forçant, effectivement tu > supprime récursivement tous les inodes concernant le répertoire. Donc > de fait les fichiers contenu dedans puisqu'ils doivent bien avoir un > parent quelque part, ce qui est un principe de base d'un inode, si tu > ne veux pas le retrouver dans /lost+found à la vérification du système > de fichiers. > > Après je ne sais pas s'il y a un problème de formulation ou bien de > compréhension. Le but du jeu n'est pas de "supprimer" un répertoire, mais de mettre son contenu dans un autre, qui se trouve être son parent, sans avoir à manipuler chacun des fichiers qu'il contient un à un. Ce qu'a écrit François me semble parfaitement logique, avec ou sans "forcer". Je vais donc m'orienter vers une autre piste de recherches pour faire ma bidouille. Merci à tous, Ph. Gras
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Le 25 mai 2016 à 11:36, Ph. Gras a écrit : >J'ai le problème inverse : je voudrais supprimer le répertoire sans supprimer >les fichiers à l'intérieur : > >/var/www/monsite/cache/wordpress => /var/www/monsite/cache Le 25 mai 2016 à 12:17, Haricophile a écrit : > > Après je ne sais pas s'il y a un problème de formulation ou bien de > compréhension. bonjour, je pense qu'on a un malentendu dû à un excès de raccourcis/un problème de terminologie. Ce que j'en comprends: déplacement et fusion du contenu du repertoire "wordpress" dans le repertoire "cache" quand "cache" existe déjà, PUIS suppression de wordpress. __ Éric Dégenètais Henix http://www.henix.com http://www.squashtest.org
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Le Wed, 25 May 2016 13:17:16 +0200, Francois Lafont a écrit : > Mais à partir du moment où tu supprimes un répertoire, où diable > voudrais-tu alors que se trouvent les fichiers qu'il contenait ? Il > faut bien que ces fichiers se trouvent dans un répertoire, non ? Si > j'ai un fichier /a/b/f1, à partir du moment où je supprime le > répertoire « b », je ne vois pas trop où pourrait se trouver le > fichier « f1 », à moins de le déplacer ailleurs bien sûr. Du coup, je > ne comprends ni la question ni son intérêt mais bon c'est pas > grave. ;) "tout est fichier" ;) Tu ne peux pas supprimer l'inode du répertoire s'il n'est pas vide. La commande rmdir ne fonctionne que sur un répertoire vide. Si tu supprime le répertoire avec rm en forçant, effectivement tu supprime récursivement tous les inodes concernant le répertoire. Donc de fait les fichiers contenu dedans puisqu'ils doivent bien avoir un parent quelque part, ce qui est un principe de base d'un inode, si tu ne veux pas le retrouver dans /lost+found à la vérification du système de fichiers. Après je ne sais pas s'il y a un problème de formulation ou bien de compréhension. -- haricoph...@aranha.fr
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Attention Philippe tu m'as répondu en privée. Perso, j'utilise la liste et rien que la liste (ou je n'utilise pas ;)). On 25/05/2016 13:03, Ph. Gras wrote: > Merci François, malheureusement c'était bien ça :-( Mais à partir du moment où tu supprimes un répertoire, où diable voudrais-tu alors que se trouvent les fichiers qu'il contenait ? Il faut bien que ces fichiers se trouvent dans un répertoire, non ? Si j'ai un fichier /a/b/f1, à partir du moment où je supprime le répertoire « b », je ne vois pas trop où pourrait se trouver le fichier « f1 », à moins de le déplacer ailleurs bien sûr. Du coup, je ne comprends ni la question ni son intérêt mais bon c'est pas grave. ;) À+ -- François Lafont
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Bonjour, On 25/05/2016 11:36, Ph. Gras wrote: > J'ai le problème inverse : je voudrais supprimer le répertoire sans supprimer > les fichiers à l'intérieur : Perso, j'ai pas compris. Dans cette phrase, je comprends « supprimer un répertoire sans supprimer les fichiers qu'il contient » ce qui est bien sûr impossible (quand on supprime un répertoire tout ce qu'il contient est supprimé aussi). -- François Lafont
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Bonjour, On 25/05/2016 04:41, Stiradens wrote: > Ta solution est intéressante car les commandes sont simples. Cela dit recréer > un répertoire je trouve ça étrange. Il suffirai de vider le répertoire sans > le détruire. Cela éviterai de gérer les droits du répertoire. Qu'en pense-tu > François? Oui, tu as tout à fait raison, c'est bien plus simple. En effet, comme tu le dis, on n'a pas à recréer le répertoire avec les bons droits etc. Après, pour vider un répertoire, le truc naturel qui me vient à l'esprit est la commande « rm -r /rep/* » mais, sauf paramétrage très spécifique, ça n'attrapera pas les fichiers dont le nom commence par un point. Mais de toute façon, peu importe ici car personnellement je n'aime pas utiliser * et la commande rm en même temps. Du coup, pour vider un répertoire, je verrais bien un find comme ça : find /var/www/monsite/cache/ -maxdepth 1 -mindepth 1 -exec rm -r '{}' '+' Et au passage, cela m'amène finalement à une autre solution du problème initial, bien plus simple, qui est : find /var/www/monsite/cache/ -maxdepth 1 -mindepth 1 '!' -name 'index.php' -exec rm -r '{}' '+' Et là, pour le coup, ça me semble assez lisible et simple pour l'utiliser dans la vraie vie. ;) -- François Lafont
Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier
Bonjour, >> Sauf erreur bien sûr, je pense que la commande commande ci-dessous fait >> exactement ce qui est demandé, sachant tout de même que je suppose ici >> que le fichier index.php est à la racine du répertoire >> /var/www/monsite/cache/ (ce n'est pas dit explicitement dans le message >> mais j'imagine que c'est bien le cas). >> >> find /var/www/monsite/cache/ -mindepth 1 '(' -type d -prune -exec rm -r >> '{}' '+' ')' -o '(' ! -name 'index.php' -exec rm '{}' '+' ')' >> >> Bon, dans la vraie vie jamais je ne m'amuse à pondre une commande find >> comme ça. Dans la vraie vie, je copie index.php dans /tmp/, je fais un >> « rm -r » directement de tout le répertoire cache/, puis j'en recrée un >> nouveau avec mkdir (éventuellement j'ai noté avant les droits du >> répertoire pour les remettre comme ils étaient initialement) puis je >> remets le fichier index.php qui se trouve dans /tmp à la racine du >> répertoire cache/. >> > Ta solution est intéressante car les commandes sont simples. Cela dit recréer > un répertoire je trouve ça étrange. Il suffirai de vider le répertoire sans > le détruire. Cela éviterai de gérer les droits du répertoire. Qu'en pense-tu > François? > J'ai le problème inverse : je voudrais supprimer le répertoire sans supprimer les fichiers à l'intérieur : /var/www/monsite/cache/wordpress => /var/www/monsite/cache Dans la pratique, j'essayer d'éviter de créer le répertoire cache avant de télécharger wordpress, et je renomme ensuite wordpress en cache avec mv. Mais ce n'est pas toujours possible. Merci d'avance, Ph. Gras