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 :

rm * après un |


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut rm * après un |
    Bonjour à tous,

    Voilà j'administre un serveur et je suis en train de développer une interface d'enregistrement et de modification. Pour vous donner le contexte, comme je suis pas encore super à l'aise et que c'est la première fois que je fais ça, j'ai fait une cron.minutely avec des fichiers .list contenant les demandes en attente des utilisateurs. (mon interface d'admin web écrit dans ce fichier depuis PHP).


    Mon problème aujourd'hui c'est que je ne sais pas comment traiter les raccourcis utilisateurs. En fait, chaque utilisateur a droit à au moins un raccourci automatique vers son compte (j'ai des liens symboliques dans /var/www/html/ qui pointent vers le public_html du home du compte). J'ai donc développé mon petit script qui va chercher le contenu du waitformodshortcut.list chaque minute et ça marche très bien pour les nouveaux "ln -s", mais étant donné que je dois effacer celui existant avant d'en créer un nouveau, je suis un peu dans le caca... Je n'ai pas envie de gérer cet aspect depuis mysql/php puisque je peux très facilement retrouver le lien sous linux.

    J'ai tenté la chose suivante, mais sans succès !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $cheminhtmluser="/home/$login/public_html/"
    if [ "`ls -l /var/www/html/ | grep $cheminhtmluser`" == '' ]
    then
        echo "Aucun raccourci n'est lié au compte $login"
     
    else
        echo "Un raccourci était déjà lié au compte $login. Il doit être effacé."
        ls -l /var/www/html/ | grep /home/$login/public_html/ | rm *
    fi
    Mais j'ai eu l'heureuse surprise de voir que rm * n'était pas pipé ! il me fait purement et simplement un rm * dans le dossier depuis lequel j'exécute le script, sans tenir compte des commandes précédentes !

    Pourtant le résultat de la commande précédente est du type suivant ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lrwxrwxrwx 1 root root   25 jun 29 20:30 sonraccourci -> /home/utilisateur/public_html/

    Quelqu'un peut-il m'éclairer sur le pourquoi du comment de ce rm ? Et éventuellement me conseiller une manip' qui serait un peu plus potable que la mienne !
    (j'avais pensé à une expression régulière entre les attributs de la ligne et le "->" signifiant lien symbolique, mais je vois pas trop comment la pondre )

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut essaie un truc du genre
    find /var/www/html/ -type l -name "<ton pattern>" -print0 | xargs -0 rm

  3. #3
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut ou alors
    tu fais ta commande ls -l rep | grep pattern | awk '{print $8}' | xargs -0 rm
    ou si ca marche pas avec une boucle for

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Bonjour,

    Merci pour ta réponse ! ça fonctionne presque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l /var/www/html/ | grep /home/cedric/public_html/ | awk '{print $9}'
    (et non $8 par contre, mais peut-être cela dépend-t-il des distribs ?)

    et ça me retourne bien, à l'affichage en tout cas, le nom du raccourci.
    Par contre, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls -l /var/www/html/ | grep /home/utilisateur/public_html/ | awk '{print $9}' | xargs -0 rm
    rm: ne peut enlever `sonraccourci\n': Aucun fichier ou répertoire de ce type
    J'ai un \n de trop
    Peut-on rajouter un pipe cut -b depuis la fin entre awk et xargs ? (je ne connaissais pas cette commande )

  5. #5
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    enleve l'option -0 a xargs

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par défaut
    Merci ! ça marche !

    Il subsiste juste une petite question quant à son intégration dans mon script...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [x@localhost ~]# ll /var/www/html/
    total 7
    lrwxrwxrwx 1 root root   25 jun 29 20:20 toto -> /home/toto/public_html/
    lrwxrwxrwx 1 root root   27 jun 29 20:20 titi -> /home/titicmoi/public_html/
    -rwxr-xr-x 1 root root 1165 jun 14 11:13 index.php
    [x@localhost ~]# ls -l /var/www/html/ | grep /home/toto/public_html/ | awk '{print $9}' | xargs rm
    rm: ne peut enlever `toto': Aucun fichier ou répertoire de ce type
    [x@localhost ~]# cd /var/www/html/
    [x@localhost html]# ls -l /var/www/html/ | grep /home/toto/public_html/ | awk '{print $9}' | xargs rm
    [x@localhost html]
    Donc... ça fonctionne en ligne de commande, merci

    Mais comment faire l'équivalent de mon cd /var/www/html dans le script ? Car ça ne fonctionne pas depuis un emplacement différent



    Édit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomraccourci=`ls -l /var/www/html/ | grep /home/toto/public_html/ | awk '{print $9}'`
    rm /var/www/html/$nomraccourci
    Pourquoi pas ?

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

Discussions similaires

  1. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16
  2. extraire 2 chiffres après virgule ?
    Par nerick dans le forum C
    Réponses: 2
    Dernier message: 13/12/2002, 17h10
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 11h44
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11

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