OVH Cloud OVH Cloud

Supprimer le contenu d'un repertoire SAUF un fichier particulier

22 réponses
Avatar
Hugues MORIN
--94eb2c062a4c9997e4053393bcd8
Content-Type: text/plain; charset=UTF-8

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

--94eb2c062a4c9997e4053393bcd8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div><div><div><div><div>Bonjour a tous<br><br><br><b=
r></div><div>J&#39;ai besoin de supprimer tout le contenu d&#39;un repertoi=
re SAUF le fichier index.php<br><br></div><div>Il me semblai que cela aurai=
du le faire:<br>find /var/www/monsite/cache ! -name &#39;index.php&#39; -e=
xec rm -rf {} \;<br><br></div><div>mais en pratique cela supprime aussi le =
repertoire &quot;cache&quot;<br><br></div><div>La syntaxe me semble correct=
e mais comment faire pour ecarter le dossier &quot;cache&quot; de la suppre=
ssion?<br><br></div><br></div>Cette solution n&#39;est peut etre pas la bon=
ne pour ce que je veux faire.<br></div>En avez-vous une autre qui fonctionn=
e?<br><br><br></div>Merci<br><br></div>Cordialement<br></div>Hugues<br><div=
><div><div><div><div><div><div><br></div></div></div></div></div></div></di=
v></div>

--94eb2c062a4c9997e4053393bcd8--

10 réponses

1 2 3
Avatar
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
Avatar
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
Avatar
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
Avatar
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 sy stème
de fichiers.

Après je ne sais pas s'il y a un problème de formulation ou bien de
compréhension.
--

Avatar
Eric Degenetais
Le 25 mai 2016 à 11:36, Ph. Gras a écrit :
J'ai le problème inverse : je voudrais supprimer le répertoire s ans 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 bie n de
compréhension.



bonjour, je pense qu'on a un malentendu dû à un excès de rac courcis/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
Avatar
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
Avatar
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
Avatar
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 di t répertoire
puis [Ctrl]+[A]
puis tu cherches ton fichier 'index.php, tu lui fais un [Ctrl]+ clic droi t
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'interfa ce
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
Avatar
Hugues MORIN
--001a113ee386f496c70533ad4172
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

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 fichie r
> 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 dossie r
> "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 di t répertoire
puis [Ctrl]+[A]
puis tu cherches ton fichier 'index.php, tu lui fais un [Ctrl]+ clic droi t
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





--001a113ee386f496c70533ad4172
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir="ltr"><div><div><div><div><div>Bonjour<br><br><br></div>Merci po ur toutes ces infos :D<br><br></div>Je vais faire quelques test et choisir celle qui m&#39;ira le mieux.<br></div>La simplicite du rm -rf !(index.php) me palit assez.<br><br><br></div>Cordialement<br></div>Hugues<br><div><div ><div><div><br><br><div class="gmail_extra"><br><div class="gmail_quote ">Le 25 mai 2016 à 18:00, Yannick <span dir="ltr">&lt;<a href="mai lto:" target="_blank"></a>&gt;</spa n> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Le 24/05/2016 12:08, Hugues MORIN a écrit :<br>
&gt; Bonjour a tous<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; J&#39;ai besoin de supprimer tout le contenu d&#39;un repertoire SAUF le fichier<br>
&gt; index.php<br>
&gt;<br>
&gt; Il me semblai que cela aurai du le faire:<br>
&gt; find /var/www/monsite/cache ! -name &#39;index.php&#39; -exec rm -rf { } ;<br>
&gt;<br>
&gt; mais en pratique cela supprime aussi le repertoire &quot;cache&quot;<b r>
&gt;<br>
&gt; La syntaxe me semble correcte mais comment faire pour ecarter le dossi er<br>
&gt; &quot;cache&quot; de la suppression?<br>
&gt;<br>
&gt;<br>
&gt; Cette solution n&#39;est peut etre pas la bonne pour ce que je veux fa ire.<br>
&gt; En avez-vous une autre qui fonctionne?<br>
&gt;<br>
&gt;<br>
&gt; Merci<br>
&gt;<br>
&gt; Cordialement<br>
&gt; Hugues<br>
&gt;<br>
<br>
</div></div>Bonsoir,<br>
<br>
Je sais je vais être un peu bourrin dans ma proposition.<br>
<br>
Avec ton gestionnaire de fichier préféré tu vas dans le dit répertoire<br>
puis [Ctrl]+[A]<br>
puis tu cherches ton fichier &#39;index.php, tu lui fais un [Ctrl]+ clic dr oit<br>
puis tu fais [Suppr]<br>
<br>
Et voilà le tour est joué.<br>
<br>
Je sais ce n&#39;est pas de la ligne de commande mais bon c&#39;est trà ¨s<br>
efficace aussi ;-)<br>
<br>
Amitiés<br>
<span><font color="#888888"><br>
--<br>
Yannick VOYEAUD<br>
Nul n&#39;a droit au superflu tant que chacun n&#39;a pas son nécessai re<br>
(Camille JOUFFRAY 1841-1924, maire de Vienne)<br>
<a href="http://www.voyeaud.org" rel="noreferrer" target="_blank">htt p://www.voyeaud.org</a><br>
Créateur CimGenWeb: <a href="http://www.francegenweb.org/cimgenweb/" rel="noreferrer" target="_blank">http://www.francegenweb.org/cimgenweb /</a><br>
Journées du Logiciel Libre: <a href="http://jdll.org" rel="norefer rer" target="_blank">http://jdll.org</a><br>
Généalogie en liberté avec Ancestris <a href="http://www.a ncestris.org" rel="noreferrer" target="_blank">http://www.ancestris.org </a><br>
<br>
</font></span></blockquote></div><br></div></div></div></div></div></div>

--001a113ee386f496c70533ad4172--
Avatar
Jean-Marc
--Signature=_Wed__25_May_2016_21_32_00_+0200_0EZzZBN8Jd8Pf6jQ
Content-Type: text/plain; charset=UTF-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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é (extglo b en l'occurence)
shopt -s extglob - avec un "s" comme dans "set"
shopt -u extglob - avec un "u" comme dans "unset"

un essai avec <ls -d !(index.php)> 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

--Signature=_Wed__25_May_2016_21_32_00_+0200_0EZzZBN8Jd8Pf6jQ
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJXRf2xAAoJEEBxy1wt6cT8/aQQAKZncYSmwIn+6IUwtMNnbWcD
WmkdoTqXM8i4sAvJAFTuIyKQozEcHxPW+7LRAKcRp+FMU1BHxrmBTJoY024tiXsK
XTtOHrQFN3gcRU0YRfPeSMEDyhh76HRE//KJh9cjeHBIit/cyepzoz0H2bfBjSur
as9WQB71WKSyOinyPzk91MBscoHRiba2p9FgvKptrB20npnUtGxoKT0jdXfbYkVk
gCL/5YFixNNIZtlmcof853jnekdI4WBPFgxuBoHGGd4X6HxPNi+esxetx7HY/lEm
B49zaMI2oWIlkN4keFcEyngbA2NHi2EGEKo6XjrBcKxMtHpCG4waohhsO88fANRv
v1WuNLLbp1voq175y1tdwX4c/RkwNo4K7JmS3+CHT2U7UD3LLzdJmk0X0MyZooG4
bOpgJv2riTWVC01TwS24eQJnxUm9nPkCNpfzgn98D9wBKyfPq3NjXH5civMg0TMJ
wMuWP70n2/YjX1YtiRpPDX7uio8sSTHhROuS95uBUsaJj/p/Fj87l8gcC0RjjODq
Eg06+plYyuZUATxA/h7NfGRJiAXmBksV4oauDfcFAo9H9qH4cQYWiGuV/hL1uP1U
Py5JAmFNgDu0JnPIxbGODQpGKp1tw09+3g97M33PMbvWuYS1DpwhrIAi5+74TyaU
7ZtiGUdm2H7PqF+EvqEl
=1gpp
-----END PGP SIGNATURE-----

--Signature=_Wed__25_May_2016_21_32_00_+0200_0EZzZBN8Jd8Pf6jQ--
1 2 3