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 :

7za et script Shell (rhel 6.8)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut 7za et script Shell (rhel 6.8)
    Bonjour

    j'ai écris un script Schell tout simple permettant de compresser des dossiers et le contenu via 7za.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i in `find * -maxdepth 0 -type d`
     
    do
        7za a -mx=9 -t7z $i.7z $i
        echo 7za a -mx=9 -t7z $i.7z $i   #pour voir la commande exécutée
    done
    lorsque je lance le script, le fichier est bien créé mais il m'annonce qu'il ne trouve aucun sous dossiers ou fichiers.

    Nom : cap1.JPG
Affichages : 176
Taille : 34,9 Ko

    Par contre si je lance manuellement la commande afficher par "echo 7za a -mx=9 -t7z $i.7z $i", Il trouve bien les sous-dossiers et les fichiers.
    Nom : cap2.JPG
Affichages : 173
Taille : 39,2 Ko

    j'ai essayé différentes méthodes, sans succès. Je n'ai pas trouvé la bonne syntaxe, tout simplement.
    Si vous avez des idées que je pourrais tester, un grand merci par avance pour vos attentions.
    Un regard neuf permet parfois de cibler une erreur.

    Jérôme

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bihouee Voir le message
    for i in `find * -maxdepth 0 -type d`
    On ne fait pas de for i in `commande`; do action $i; done car le for utilise l'espace pour séparer ses éléments. Si un fichier possède un espace dans son nom, il n'est alors pas traité => commande |while read i; do action "$i"; done ou bien while read i; do action "$i"; done < <(commande) (et tu remarqueras les guillemets autour de la variable "$i" lorsqu'elle est utilisée).
    Pour le reste, le souci vient de la commande "7za" donc il faut regarder ses possibilités et options via le "man"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Surtout qu'un simple: for i in */ est suffisant ici car dans le find présenté, c'est le * qui liste tous les fichiers et le -type d qui écarte ce qui n'est pas un répertoire (c'est syntaxe n'est pas une syntaxe "standard" pour l'utilisation d'un find, la syntaxe standard serait plutôt find -maxdepth 1 -not -name '.*' -type d )

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Bonjour Sve@r

    Bon, en lisant ta réponse, je me suis dit, mince c'est pas la réponse que j'attendais.

    Je n'avais jamais utilisé la commande while.
    Comme je suis curieux, je teste la commande pour comprendre son fonctionnement.
    J'utilise mon scripte pour cela.
    Bah cela fonctionne maintenant .

    Voici le script modifié (on peut faire autrement mieux peut être).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    find * -maxdepth 0 -type d > liste
    while read i
    do
       7za a -mx=9 -t7z $i.7z $i
    done < liste
    rm -rf liste
    Donc merci pour ton aide.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for d in ./*/; do 7za a -mx=9 -t7z "$d.7z" "$d"; done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bihouee Voir le message
    Je n'avais jamais utilisé la commande while.
    Bah, si tu apprends le for, faut aussi apprendre le while (qui continue tant que la commande qu'il invoque est vraie) + le until qui, lui, continue tant qu'elle est fausse (toutefois un peu tombé en désuétude depuis qu'on peut inverser le retour vrai/faux d'une commande via le point d'exclamation)

    Citation Envoyé par bihouee Voir le message
    Voici le script modifié (on peut faire autrement mieux peut être).
    Oui. Déjà les fichiers de "travail" c'est rarement nécessaire mais si ça l'est, alors à minima on les met dans "/tmp". Ca évite déjà à ton script de planter si tu te trouves dans un dossier qui n'est pas à toi lorsque tu le lances car le fichier "liste" sera créé dans le dossier où tu te trouves. Et on leur donne un nom permettant d'éviter les collisions (quid si deux users exécutent le script en même temps ???) donc on peut inclure la variable "$$" (pid en cours) dans le nom (car un pid est unique à un moment donné) ou utiliser mktemp pour des soucis de noms temporaires plus complexes.
    Donc de façon générale
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commande >fichier
    while read i do; ...; done <fichier
    ... se réduit en while read i do; ...; done < <(commande) et on évite de créer un fichier (temps d'accès disque) pour rien.

    Ensuite tu as des raccourcis (comme N_BaH) qui permettent parfois d'éviter les appels de commandes externes.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    je n'appellerais pas ça un "raccourci", mais la voie directe.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Script shell
    Par anzar dans le forum Linux
    Réponses: 4
    Dernier message: 03/12/2004, 14h41
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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