Re: Supprimer le contenu d'un repertoire SAUF un fichier particulier

2016-05-25 Par sujet Jean-Marc
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

2016-05-25 Par sujet Hugues MORIN
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

2016-05-25 Par sujet Eric Degenetais
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

2016-05-25 Par sujet Yannick
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

2016-05-25 Par sujet Ph. Gras
> 
>> 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

2016-05-25 Par sujet Eric Degenetais
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

2016-05-25 Par sujet Haricophile
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

2016-05-25 Par sujet Francois Lafont
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

2016-05-25 Par sujet Francois Lafont
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

2016-05-25 Par sujet Francois Lafont
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

2016-05-25 Par sujet Ph. Gras
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