Supprimer le contenu d'un repertoire SAUF un fichier particulier

Le
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="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--
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Belaïd
Le #26399428
--001a113cd14acb61fa053393dca0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

il aussi d'autre possibilités

Le 24 mai 2016 à 12:16, Belaïd
Bonjour,
Voici une petite correction sans l'option -r:
find /var/www/monsite/cache ! -name "index.php" -exec rm -f {} ;



Le 24 mai 2016 à 12:08, Hugues MORIN
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






--
< Belaid >






--
< Belaid >

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

</blockquote></div><br><br clear="all"><br></div></div><span class="HOE nZb"><font color="#888888">-- <br><div>&lt; Belaid &gt;</div>
</font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_sig nature">&lt; Belaid &gt;</div>
</div>

--001a113cd14acb61fa053393dca0--
Belaïd
Le #26399429
--001a113cdc66e38580053393d9cd
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Bonjour,
Voici une petite correction sans l'option -r:
find /var/www/monsite/cache ! -name "index.php" -exec rm -f {} ;



Le 24 mai 2016 à 12:08, Hugues MORIN
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






--
< Belaid >

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

</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_sig nature">&lt; Belaid &gt;</div>
</div>

--001a113cdc66e38580053393d9cd--
VieuxGeek DuSystem
Le #26399426
En faite je me suis un peu trompé :-)

cd /var/www/monsite/cache
for i in $(ls -l /var/www/monsite/cache | grep -v 'index'); do echo $i; don e

Et si tu as bien tous les fichiers listés sauf index, y a plus qu'a rm

cd /var/www/monsite/cache
for i in $(ls -l /var/www/monsite/cache | grep -v 'index); do rm -rf $i; do ne

C'est mieux :-)

Le 24 mai 2016 à 12:22, VieuxGeek DuSystem
Boujour

Je propose

cd /var/www/monsite/
for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do echo $i; done

Et si tu as bien tous les fichiers listés sauf cache, y a plus qu'a rm

cd /var/www/monsite/
for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do rm -rf $i; done

Fait une sauvegarde avant pour mon bien :-)

Cordialement
Stéphane

Le 24 mai 2016 à 12:08, Hugues MORIN
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

VieuxGeek DuSystem
Le #26399425
Boujour

Je propose

cd /var/www/monsite/
for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do echo $i; done

Et si tu as bien tous les fichiers listés sauf cache, y a plus qu'a rm

cd /var/www/monsite/
for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do rm -rf $i; done

Fait une sauvegarde avant pour mon bien :-)

Cordialement
Stéphane

Le 24 mai 2016 à 12:08, Hugues MORIN
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

Jean-Marc
Le #26399439
--Signature=_Tue__24_May_2016_13_01_16_+0200_BWIq8NbnQIsv4bOD
Content-Type: text/plain; charset=UTF-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Tue, 24 May 2016 12:08:20 +0200
Hugues MORIN
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?



Tu peux aussi jouer avec les négations dans les regexp.
cd /var/www/monsite/cache; rm -fr !(index.php)

Attention, cela nécessite d'activer extglob.

Voilà comment vérifier, activer, désactiver extglob :
shopt extglob
shopt -s extglob
shopt -u extglob

Si tu comprends l'anglais, une chouette page :
http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -wildcards-when-pattern-matching-in-a-unix-linu





Merci

Cordialement
Hugues




Jean-Marc
--Signature=_Tue__24_May_2016_13_01_16_+0200_BWIq8NbnQIsv4bOD
Content-Type: application/pgp-signature

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

iQIcBAEBCAAGBQJXRDR8AAoJEEBxy1wt6cT8pLEQAJ/KuBGFQtV+QvNWg7ZmjDB2
Nv7XdEZQt53yt7TQDoPFzZdg2GKoLTkg1B4HkeznU0MYJ25N4ejYfGxhz4HbnRei
X0oxGjobAAdul5NaNNvQGJSK52ugekzEo31K9VOYCW6wmdWbONAvZrkF2gFAsVXh
xdqxCNuofEQcaYDzFHDwazEKJ+bxauSr4KlRrUoVJzLjG/9YQWBkElYZe8RgaDY6
Gj5rY5/6IzkZw7LpAhASmhLN7Vgn50zLOT6ZYaMTzURsaEVnzlIKOAKlNqt02T1H
mnMFs2Kru7H9wrIDgdqjrDc8wAaATGjHoFh+xD5xXCh905c6Tflybcig0EfcLCcG
0IYseeYnYSFHlD70w2EwWEPdNQW2m0kDYU3X9JN663CIBcYFteDwfxxRKvKh77qk
vhaal4DcK+yBdJTFX1xGyc4M3of+AiwlSgc/oq2vNpw90lmcQm99HAh07fpuk3Um
TwlNLK3D39ifmWTqwgXNw06yIbQlEObRxOyTNZBQOlNJX3FhdYGACwYmYqnlT6Ft
Q948QdarXJ/JTBWPFcJYZLpUD08Eu3jYYU8lfgwH7OCWLOimPPyhGtsw4muGVfVB
qOFhloC+kef0aLH3/I6ImaOJeBhciY6xB55KZiACRa3/9GbL8fCUg/OHG8WH6Ln8
kvuHpvMwQJ7Fqk2Y1TWh
=cITB
-----END PGP SIGNATURE-----

--Signature=_Tue__24_May_2016_13_01_16_+0200_BWIq8NbnQIsv4bOD--
francois
Le #26399447
On Tue, May 24, 2016 at 12:08:20PM +0200, Hugues MORIN wrote:
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?



find /var/www/monsite/cache ! -name 'index.php' -delete

ou

find /var/www/monsite/cache -depth ! -name 'index.php' ( ( -type f -exec rm '{}' ; ) -o ( -type d -exec rmdir '{}' ; ) )

Cela évite le "rm -rf" qui supprime tout. La suppression des dossiers
dans lesquels il restera des fichiers échouera.

Par exemple :

$ find ./var/www/monsite/cache
./var/www/monsite/cache
./var/www/monsite/cache/rep2
./var/www/monsite/cache/rep2/otherfile2b
./var/www/monsite/cache/rep2/otherfile2a
./var/www/monsite/cache/rep1
./var/www/monsite/cache/rep1/index.php
./var/www/monsite/cache/rep1/otherfile1a

$ find ./var/www/monsite/cache '!' -name 'index.php' -delete
find: impossible de supprimer « ./var/www/monsite/cache/rep1 »: Le dossier n'est pas vide
find: impossible de supprimer « ./var/www/monsite/cache »: Le dossier n'est pas vide

$ find ./var/www/monsite/cache
./var/www/monsite/cache
./var/www/monsite/cache/rep1
./var/www/monsite/cache/rep1/index.php
Belaïd
Le #26399467
--001a1140a95e23c4cb05339cf192
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Bonsoir,
est-tu sur de ta commande: for i in $(ls -l /var/www/monsite/cache | grep
-v 'index); ?
car la commande: ls -l | grep -v 'index' donne comme résultats des lig nes
où chaque champ (le séparateur de champ par défaut est un es pace)
correspond aux: droits du fichier, le propriétaire, groupe ... et enfi n le
nom du fichier. Donc avec la commande rm -rf $i , $i prendra comme valeur
chaque champs de cette ligne (propriétaire du fichier, groupe, ...).

Le 24 mai 2016 à 12:24, VieuxGeek DuSystem
En faite je me suis un peu trompé :-)

cd /var/www/monsite/cache
for i in $(ls -l /var/www/monsite/cache | grep -v 'index'); do echo $i;
done

Et si tu as bien tous les fichiers listés sauf index, y a plus qu'a rm

cd /var/www/monsite/cache
for i in $(ls -l /var/www/monsite/cache | grep -v 'index); do rm -rf $i;
done

C'est mieux :-)

Le 24 mai 2016 à 12:22, VieuxGeek DuSystem :
> Boujour
>
> Je propose
>
> cd /var/www/monsite/
> for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do echo $i; done
>
> Et si tu as bien tous les fichiers listés sauf cache, y a plus qu' a rm
>
> cd /var/www/monsite/
> for i in $(ls -l /var/www/monsite/ | grep -v 'cache'); do rm -rf $i; do ne
>
> Fait une sauvegarde avant pour mon bien :-)
>
> Cordialement
> Stéphane
>
> Le 24 mai 2016 à 12:08, Hugues MORIN >> Bonjour a tous
>>
>>
>>
>> J'ai besoin de supprimer tout le contenu d'un repertoire SAUF le fichi er
>> 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 dossi er
>> "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
>>






--
< Belaid >

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

<br>
cd /var/www/monsite/cache<br>
for i in $(ls -l /var/www/monsite/cache | grep -v &#39;index&#39;); do echo $i; done<br>
<br>
Et si tu as bien tous les fichiers listés sauf index, y a plus qu&#39; a rm<br>
<br>
cd /var/www/monsite/cache<br>
for i in $(ls -l /var/www/monsite/cache | grep -v &#39;index); do rm -rf $i ; done<br>
<br>
C&#39;est mieux :-)<br>
<div class="HOEnZb"><div class="h5"><br>
Le 24 mai 2016 à 12:22, VieuxGeek DuSystem &lt; &gt; Boujour<br>
&gt;<br>
&gt; Je propose<br>
&gt;<br>
&gt; cd /var/www/monsite/<br>
&gt; for i in $(ls -l /var/www/monsite/ | grep -v &#39;cache&#39;); do echo $i; done<br>
&gt;<br>
&gt; Et si tu as bien tous les fichiers listés sauf cache, y a plus qu &#39;a rm<br>
&gt;<br>
&gt; cd /var/www/monsite/<br>
&gt; for i in $(ls -l /var/www/monsite/ | grep -v &#39;cache&#39;); do rm - rf $i; done<br>
&gt;<br>
&gt; Fait une sauvegarde avant pour mon bien :-)<br>
&gt;<br>
&gt; Cordialement<br>
&gt; Stéphane<br>
&gt;<br>
&gt; Le 24 mai 2016 à 12:08, Hugues MORIN &lt; &gt;&gt; Bonjour a tous<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; J&#39;ai besoin de supprimer tout le contenu d&#39;un repertoire S AUF le fichier<br>
&gt;&gt; index.php<br>
&gt;&gt;<br>
&gt;&gt; Il me semblai que cela aurai du le faire:<br>
&gt;&gt; find /var/www/monsite/cache ! -name &#39;index.php&#39; -exec rm - rf {} ;<br>
&gt;&gt;<br>
&gt;&gt; mais en pratique cela supprime aussi le repertoire &quot;cache&quo t;<br>
&gt;&gt;<br>
&gt;&gt; La syntaxe me semble correcte mais comment faire pour ecarter le d ossier<br>
&gt;&gt; &quot;cache&quot; de la suppression?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Cette solution n&#39;est peut etre pas la bonne pour ce que je veu x faire.<br>
&gt;&gt; En avez-vous une autre qui fonctionne?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Merci<br>
&gt;&gt;<br>
&gt;&gt; Cordialement<br>
&gt;&gt; Hugues<br>
&gt;&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class ="gmail_signature">&lt; Belaid &gt;</div>
</div>

--001a1140a95e23c4cb05339cf192--
Francois Lafont
Le #26399474
Bonsoir,

On 24/05/2016 12:08, Hugues MORIN wrote:

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?



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/.

--
François Lafont
Stiradens
Le #26399475
Le 25/05/2016 00:15, Francois Lafont a écrit :
Bonsoir,

On 24/05/2016 12:08, Hugues MORIN wrote:

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?


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?
Ph. Gras
Le #26399493
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=
Publicité
Poster une réponse
Anonyme