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 :

script supprimer fichiers autres ceux d'une liste


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut script supprimer fichiers autres ceux d'une liste
    Bonjour,

    Je cherche à faire un script bash en cron, qui me permet de supprimer tous les fichiers / dossiers d'un répertoire s'ils sont différents de ceux que j'ai listé dans ce même script à la manière d'un tableau du genre :
    fichiers_a_garder[0]='fichier1.txt'
    fichiers_a_garder[1]='fichier2.txt'
    fichiers_a_garder[2]='fichier3.txt'

    J'ai lu des scripts qui supprimaient les fichiers listés par simple boucle. Mais à l'inverse, comment faire pour supprimer ceux qui ne sont pas listés ?

    Merci infiniment pour votre aide précieuse !

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

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

    avec le développement des chemins, et l'option extglob :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rm !(fichier1.txt|fichier2.txt)
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Invité
    Invité(e)
    Par défaut
    merci pour votre réponse.

    J'ai mis ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
     
    rm !(/home/liandri/files/fichier1.txt|/home/liandri/files/fichier2.txt)
    Mais ça marche pas, il me renvoi l'erreur :
    ./raz.sh: ligne 3: Erreur de syntaxe près du symbole inattendu « ( »
    Merci pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    as-tu activé l'option shell extglob ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
     
    shopt -s extglob
    rm /home/liandri/files/!(fichier1|fichier2).txt
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Toujours pareil

    /home/liandri/raz.sh: 2: shopt: not found
    /home/liandri/raz.sh: 4: Syntax error: "(" unexpected
    En fait mon soucis est grâce à une liste de noms de fichier que j'ai définie dans un fichier Fichiers_A_Conserver, je voudrai supprimer tous les autres fichiers automatiquement en cron.

    Mon script est dans /home/liandri/raz.sh
    Au même niveau que /home/liandri/Fichiers_A_Conserver, qui contient :
    fichier1.txt
    fichier2.txt
    fichier3.txt
    Dans /home/liandri/files/, j'ai mes 3 fichiers :
    fichier1.txt
    fichier2.txt
    fichier3.txt

    Je souhaite que par un script, je conserver toujours ses 3 fichiers (qui peuvent être éditer), mais que tout autre fichier ou dossier situé dans ce même répertoire soit automatiquement effacé. Ainsi je ne veux pas qu'il puisse avoir dans /home/liandri/files/ ceci :
    truc truc
    fichier1.txt
    fichier2.txt
    fichier3.txt
    mon dossier

    et ceci de façon récursive bien sur.

    J'ai déjà commencé un script, mais il est très capricieux et fonctionne mal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #!/bin/bash
    OLDIFS=$IFS
     
    folderorigine=/home/liandri
     
    if [ ! -f $folderorigine/Fichiers_A_Conserver ] >/dev/null
    	then
    	echo "Aucun fichier Fichiers_A_Conserver";
    	exit 0;
    fi
     
    ls $folderorigine/files/ > $folderorigine/Fichiers_Du_Dossier
     
    diff() {
    	awk 'BEGIN{RS=ORS="\n"}
    		{NR==FNR?a[$0]++:a[$0]--}
    		END{for(k in a)if(a[k])print k}' <(echo -n "${!1}") <(echo -n "${!2}");
    }
     
    IFS=$(echo -e "\n")
     
    Fichiers_A_Conserver=`cat $folderorigine/Fichiers_A_Conserver`
    Fichiers_Du_Dossier=`cat $folderorigine/Fichiers_Du_Dossier`
     
    Fichier_En_Trop=($(diff Fichiers_Du_Dossier[@] Fichiers_A_Conserver[@]))
     
    for fichier in "${Fichier_En_Trop[@]}"; do
    	rm -rf "$folderorigine/files/$fichier";
    done
     
    rm -f $folderorigine/Fichiers_Du_Dossier
     
    IFS=$OLDIFS
    Voilà, merci vraiment pour votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    /home/liandri/raz.sh: 2: shopt: not found
    tu n'utilises sûrement pas bash !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. telecharger un fichier zip qui contient une liste de fichier à supprimer
    Par joulive dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 29/07/2009, 13h54
  2. Réponses: 1
    Dernier message: 21/04/2007, 16h36
  3. Réponses: 13
    Dernier message: 01/08/2006, 16h59
  4. [.NET]réécriture d'un fichier a partir d'une list box
    Par scorpking dans le forum VC++ .NET
    Réponses: 14
    Dernier message: 24/04/2006, 14h16
  5. pointer sur un autre élément d'une liste en codage
    Par rahan_dave dans le forum Access
    Réponses: 3
    Dernier message: 03/02/2006, 13h25

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