rm -fr * (sauf : fichier1, Fichier2...)

Le
Benoit B
Bonjour à tous,

Comment fait-on pour supprimer tout (rm -fr *) sauf une liste de fichiers ?

Merci d'avance

Benoit
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
raphael.poitevin
Le #26478210
Benoit B
Comment fait-on pour supprimer tout (rm -fr *) sauf une liste de
fichiers ?

Une solution serait de faire un chmod -w sur les fichiers à conserver
avant le rm et de refaire un chmod +w après. Attention, je ferais rm -r
et non rm -rf.
--
Raphaël
Marc Chantreux
Le #26478214
salut,
On Mon, Jun 11, 2018 at 10:55:23PM +0200, Benoit B wrote:
Comment fait-on pour supprimer tout (rm -fr *) sauf une liste de fichiers ?

si tu utilises zsh avec l'option extendedglob, tu peux mettre des motifs
d'exclusion (~) ou utiliser un motif inverse (^)
* # tous les fichiers
*~*(jp(e|)g|png|bmp) # tous sauf les fichier jpeg jpg png bpm
*~*.(#i)(jp(e|)g|png|bmp) # idem mais key insensitive
les exclusions sont chainables
bar*~*foo?*.*~*.txt
sont tous les fichiers qui commencent par bar, qui contiennent foo et au
moins un symbole dans la base et qui ne sont pas d'extension txt.
tu peux aussi utiliser l'exclusion
mkdir old
mv ^old old # déplace tous les fichiers et repertoires autres que
# old dans old
tu peux aussi écrire un filtre maison pour avoir une exculsion à la
mimine: soit ~/protect ta liste des fichiers a proteger:
rm *(e:'! grep -qxF $REPLY ~/protect':)
et même écrire une fonction filtre réutilisable:
but_protected () ! grep -qxF $REPLY ~/protect
rm *(+but_protected)
evidement ca n'est qu'un exemple parceque du coup il faudrait plutot
faire un ls dans un fichier temporaire et faire cracher a grep la
difference entre ce fichier et protected mais je voulais un cas simple.
au passage je suis en train de collecter (c'est tres embroyonnaire)
plein de notes sur le scripting zsh:
https://github.com/eiro/zsh-programming-guide/blob/master/intro.md
a+
marc
Hugues MORIN
Le #26478229
--000000000000015754056e6dd4af
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Salut
J'utilise cette technique pour faire un rm -rf * (sauf cerrtains fichier)
En premier lieu il faut rendre actif l'exclusion (!) par la commande:
:~# shopt -s extglob
(Je vous laisse chercher dans le man car je ne me rappelle plus des details
et des termes)
ensuite on supprime les fichiers avec la commande:
:~# rm -rf !(index.html)
=> suppression de tous les fichier SAUF index.html)
et apres on peut desactiver l'exclusion si on le souhaite en faisant:
:~# shopt -u extglob
La commande rm peut etre TRES dangeureuse, donc rester toujours TRES
prudent en l'utilisant ;-)
Voila, en esperant que ca vous servira
Cordialement
Hugues
Le 12 juin 2018 à 10:22, Bernard Isambert
Le 11/06/2018 à 23:10, Raphaël POITEVIN a écrit :
Benoit B Comment fait-on pour supprimer tout (rm -fr *) sauf une liste de
fichiers ?

Une solution serait de faire un chmod -w sur les fichiers à conserv er
avant le rm et de refaire un chmod +w après. Attention, je ferais r m -r
et non rm -rf.
Avec cette méthode :

--> si on fait "rm -rf", les fichiers sont effacés purement et simpl ement
(sauf si on n'a pas le droit w sur le répertoire parent, mais alors on ne
pourra rien effacer).
--> si on fait "rm -r", la question "effacer le fichier protégé en
écriture" est posée pour chaque fichier. Ça peut être fastidieux s'il y en
a beaucoup et ça ne peut pas être mis dans un script non intera ctif.
--
Bernard.
20 ans d'utilisation de Debian. Comme le temps passe...


--000000000000015754056e6dd4af
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Benoit B &lt; <br>
Comment fait-on pour supprimer tout (rm -fr *) sauf une liste de<br>
fichiers ?<br>

<br></span>
Une solution serait de faire un chmod -w sur les fichiers à conserver< br>
avant le rm et de refaire un chmod +w après. Attention, je ferais rm - r<br>
et non rm -rf.<br>
<br>

Avec cette méthode :<br>
--&gt; si on fait &quot;rm -rf&quot;, les fichiers sont effacés pureme nt et simplement (sauf si on n&#39;a pas le droit w sur le répertoire parent, mais alors on ne pourra rien effacer).<br>
--&gt; si on fait &quot;rm -r&quot;, la question &quot;effacer le fichier p rotégé en écriture&quot; est posée pour chaque fichier. Ça peut être fastidieux s&#39;il y en a beaucoup et ça ne p eut pas être mis dans un script non interactif.<span class="HOEnZb"> <font color="#888888"><br>
<br>
-- <br>
Bernard.<br>
20 ans d&#39;utilisation de Debian. Comme le temps passe...<br>
<br>
</font></span></div><br></div>
--000000000000015754056e6dd4af--
Daniel Caillibaud
Le #26478270
Le 11/06/18 à 23:55, Frederic MASSOT écrit :
FM> Utiliser find pour choisir les fichiers à supprimer et exclure les
FM> autres :
Ça me semble une bonne solution
FM> find . -name toto* -exclude truc1 -exclude truc2 -exec rm '{}' ;
Tu peux remplacer `-exec rm '{}' ;` par `-delete`
L'avantage de cette solution, c'est qu'elle permet de faire d'abord
find -exclude truc1 -exclude truc2
pour vérifier qu'il n'y a rien à conserver dans la liste, puis ra ppeler la
dernière commande avec la flèche vers le haut et ajouter le `-del ete`
--
Daniel
Il y a des temps où l’on ne doit dépenser le mépris qu’avec économie,
à cause du grand nombre de nécessiteux.
Chateaubriand (Mémoires d'outre-tombe, 1848)
hamster
Le #26478316
Le 12/06/2018 à 15:43, Raphaël POITEVIN a écrit :
Bonne leçon à garder en tête, find le couteau suisse.

T'a un problème. Tu te dit "je vais pouvoir résoudre ca avec find" et
pouf, t'a 2 problèmes. Alors tu te dit "il faut que j'aille lire man
find" et pouf, t'a 3 problèmes…
find est en effet très puissante, mais bien la comprendre et bien
l'utiliser demande du travail, lire son man demande beaucoup de temps et
le comprendre encore plus. Le seul man que je connaisse qui soit pire
c'est ffmpeg. Commence par faire des essais sur une arborescence de test.
Publicité
Poster une réponse
Anonyme