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