[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



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





Reply to: