IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Garder que 5 fichiers qui commencent par REF dans un dossier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2022
    Messages : 1
    Par défaut Garder que 5 fichiers qui commencent par REF dans un dossier
    Bonjour,

    J'aimerais faire un script de purge, qui va me garder que les 5 derniers fichiers récents mais ces fichiers doivent commencer par REF, et supprimer les autres fichiers aussi qui commencent par REF, mais ne pas toucher aux autres fichiers.
    Par exemple: dans mon dossier j'ai:

    -rw-r--r-- 1 0  1 janv.  2022 REF_1
    -rw-r--r-- 1 0  1 févr.  2022 REF_2
    -rw-r--r-- 1 0  1 mars   2022 REF_3
    -rw-r--r-- 1 0  1 avr.   2022 REF_4
    -rw-r--r-- 1 0  1 mai    2022 REF_5
    -rw-r--r-- 1 0  1 juin   2022 REF_6
    -rw-r--r-- 1 0  1 juil.  2022 fichier_7
    -rw-r--r-- 1 0  1 août   2022 fichier_8
    -rw-r--r-- 1 0  1 sept.  2022 REF_9
    Le script doit supprimer uniquement:
    -rw-r--r-- 1 0  1 janv.  2022 REF_1
    -rw-r--r-- 1 0  1 févr.  2022 REF_2
    j'ai essayé ls -t REF* | head -n+4 | xargs rm REF* mais cette commande me supprime tous les fichiers qui commencent par REF


    Avez-vous une idée de la commande?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    tu dis à xargs de supprimer les fichiers qui commencent par REF, et c'est ce qu'il fait !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./ -maxdepth 1 -type f -name 'REF*' -printf '%z %f\0' | sort -z -k1rn,1 | head -z -n4  | cut -z -d ' ' -f2- | xargs -0 -I {} echo "rm {}"
    parce qu'on utilise pas ls.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Mon find ne trouve pas le %z, sinon avec un rm -f, on peut reprendre ton principe mais en raccourcissant quelque peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./ -maxdepth 1 -type f -name 'REF*' -printf "%f /%A@/\n" | sort  -k2r,2 | tail +6 | xargs -L1 rm -f
    Ici, je me passe de la suppression de la colonne qui permet de faire le tri puisque de toute façon rm ne trouvera pas le fichier (répertoire plutot)...
    Bon après, je reste très spécifique à la demande et au format de nommage de ses fichiers.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    %z est une erreur de copie manuelle.
    le printf '...\0' est important, car, sous mon $HOME, j'ai toujours un
    pareil pour l'ordre : le premier espace sépare la date depuis Epoch du nom du fichier. Le premier champ est donc la date, et tout ce qui reste est le nom du fichier.
    le séparateur "d'enregistrement" est le caractère NULL (\0).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    ls -t REF* | head -n+4 | xargs rm REF*
    Le deuxième REF* est en trop. Mais avant de foncer tête baissée, et écrire ls -t REF* | head -n+4 | xargs rm, réfléchis à ton filtre. 4 ou 5 ou 6 ? Signe "plus" ou signe "moins" dans la valeur de l'option du head ? Pourquoi head alors que tu veux tail ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -t REF* | tail -n+6 | xargs echo rm
    Si c'est bon, tu peux enlever le echo.

    Tu n'étais pas loin.

Discussions similaires

  1. [XL-2010] Récupérer le nom d'un fichier qui commence par une chaine de caractère spécifique
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/10/2013, 13h48
  2. Réponses: 1
    Dernier message: 11/06/2013, 15h25
  3. [WD16] Ouvrir le premier fichier qui commence par une chaine connue
    Par EriCstoFF dans le forum WinDev
    Réponses: 2
    Dernier message: 28/10/2011, 16h27
  4. selection des fichiers TXT qui commence par SR dans getopenfilename
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/05/2009, 17h04
  5. Réponses: 5
    Dernier message: 19/01/2007, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo