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 :

Comment supprimer seulement certains fichiers cachés ?


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Comment supprimer seulement certains fichiers cachés ?
    Bonjour à tous, je souhaite réaliser un script qui parcourt toute mon arborescence et qui supprime tout les fichiers cachés (ex : ".git") sauf certains (ex : ".@__thumb").
    J'ai fais un script qui parcourt mon arborescence et qui supprime tout mes fichiers commençant par un ".".
    Le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    find . -depth -type d -name '.*' |
    while read f
       do
                    dn=`dirname "$f"`
                    bn=`basename "$f"`
                    mv "$dn/$bn" "$dn/${bn//.}"
    done
    J'ai voulu ensuite l'adapter et ajouter une condition pour que lorsque mon dossier/fichier s'appelle ".@__thumb" par exemple (qui est un dossier que je ne veux pas supprimer) il ne supprime pas le ".". J'ai obtenu ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    thumb=".@__thumb"
    echo $thumb
     
    find . -depth -type d -name '.*' |
    while read f
       do
            if [[ $bn != $thumb ]]
            then
                    dn=`dirname "$f"`
                    bn=`basename "$f"`
                    mv "$dn/$bn" "$dn/${bn//.}"
            fi
    done
    Cependant, ma condition semble ne servir à rien. Mon script supprime quand même mon dossier ".@__thumb". Auriez-vous une idée d'où pourrait venir le problème ou une idée d'amélioration ?
    Je ne sais pas si j'ai été clair dans mon explication. Si vous avez des questions, n'hésitez pas.
    En vous remerciant.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    pourquoi, si tu veux supprimer des fichiers, demandes-tu à find de remonter les répertoires ?

    de plus la boucle est mal faite* et inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./ -type f -name '.*' -a ! -name '.@__thumb' -delete
    /!\ cette commande supprime les fichiers trouvés !
    fais un affichage avant pour la valider.

    --
    * crée un fichier ou un répertoire avec un alinéa pour rire un peu...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./ -type f -name '.*' - a ! -name '.@__thumb' -delete
    /!\ cette commande supprime les fichiers trouvés !
    fais un affichage avant pour la valider.
    Euh... j'ai comme un doute... La présence d'une espace entre "-" "a" est-elle bien volontaire ?

    (chez moi, ça marche mieux sans, mais je ne suis que posix...)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Euh... j'ai comme un doute... La présence d'une espace entre "-" "a" est-elle bien volontaire ?

    (chez moi, ça marche mieux sans, mais je ne suis que posix...)
    tu as raison petit POSIX , c'est une faute de frappe; je corrige. Merci.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    pourquoi, si tu veux supprimer des fichiers, demandes-tu à find de remonter les répertoires ?

    de plus la boucle est mal faite* et inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./ -type f -name '.*' -a ! -name '.@__thumb' -delete
    /!\ cette commande supprime les fichiers trouvés !
    fais un affichage avant pour la valider.

    --
    * crée un fichier ou un répertoire avec un alinéa pour rire un peu...
    Effectivement ça marche beaucoup mieux. De plus j'ai fini par remarqué que ma condition n'était pas dans l'ordre. Il aura fallu que j'écrive mon script comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    thumb=".@__thumb"
    echo $thumb
     
    find . -depth -type d -name '.*' |
    while read f
       do
                    dn=`dirname "$f"`
                    bn=`basename "$f"`
    if [[ $bn != $thumb ]]
    then
                    mv "$dn/$bn" "$dn/${bn//.}"
            fi
    done
    Je vous remercie beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP]Comment envoyer seulement certains fichiers
    Par Concombre Masqué dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 09/03/2009, 11h09
  2. Réponses: 5
    Dernier message: 23/06/2008, 14h47
  3. [CKEditor] FCKeditor filemanager : Comment supprimer des images, fichiers?
    Par spolt dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 06/12/2007, 09h54
  4. [VS2005]Inclure seulement certains fichiers dans une .lib
    Par NicolasJolet dans le forum Visual C++
    Réponses: 2
    Dernier message: 28/07/2006, 09h14
  5. Réponses: 4
    Dernier message: 24/09/2004, 10h17

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