Forum Programmation.shell script pour déplacer des fichiers vers répertoires de même noms

Posté par  . Licence CC By‑SA.
1
4
sept.
2018

Bonjour à tous. J'ai un souci actuellement,je suis à la recherche d'un script(à exécuter comme CRON sur un serveur d'hébergement web) me permettant de déplacer (pas copier) des fichiers (A.pdf, B.pdf, C.pdf,A.jpg, B.jpg…) présents dans un répertoire vers des dossiers existants portants leurs noms respectifs..(c'est-à dire fichier A.pdf,A.jpg….->dossierA , B.pdf->dossierB,…)Merci de m'éclairer un peu svp..

  • # Début de solution

    Posté par  (site web personnel) . Évalué à 3. Dernière modification le 04 septembre 2018 à 09:20.

    En shell POSIX, pour déplacer une fichier vers un répertoire qui porte son nom, tu peux utiliser ça :

    src=A.pdf  # to replace with the script argument or whatever contex you use
    mv "$src" "${src%.*}/"
    
    • [^] # Re: Début de solution

      Posté par  (site web personnel) . Évalué à 1.

      Ou

      src=A
      mv "${src}.pdf" "${src}/"

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

  • # tester si répertoire existant

    Posté par  . Évalué à 2.

    #!/bin/bash
    
    lstPdf=( *.pdf )
    
    for fich in "${lstPdf[@]}"; do
        test -d "${fich%.*}" && mv "$fich" "${fich%.*}"
    done
    
    unset lstPdf
    
    
  • # lire le cours

    Posté par  . Évalué à 8.

    ca ressemble un peu trop à un exercice pour prendre en main le shell de ton linux en debut d'année,

    aussi je te recommande de lire le cours, ou d'aller lire la documentation de celui-ci ;)

  • # questions

    Posté par  . Évalué à 2.

    les dossiers existent ils déjà ?

    comment gérer les fichiers sans '.' ?
    comment gérer les fichiers avec plusieurs '.' (typiquement un .tar.gz ou macron.en.slip.de.bain.à.la.piscine.payée.aux.frais.du.contribuable.jpg )

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: questions

      Posté par  . Évalué à 1.

      Bonjour fearan et merci pour la reponse.En fait j'ai un module qui me permet de creer des comptes utilisateurs automaiquement par upload de fichier CSV rempli.sauf que chacun des dossiers doit recevoir un ou plusieurs fichiers portants son nom et le souci est qu'avec plusieurs comptes, il devient très fastudueux de les envoyer un par un. je les uploade donc dans un dossier direct sur le serveur(c'est déjà fait) et j'aimerais créer un CRON qui déplacerait donc les fichiers vers leurs dossiers respectifs (donc en fait les dossiers existent déjà).

      • [^] # Re: questions

        Posté par  . Évalué à 2. Dernière modification le 05 septembre 2018 à 09:56.

        bon ben vu que les dossier existent déjà c'est relativement simple

        #!/bin/bash
        
        REPUTIL=/home  #dossier contenant les dossiers utilisateurs
        REPFICHIERS=   #dossier contenant les fichier à déplacer
        
        cd "$REPUTIL"  # on se déplace dans le dossier des utilisateurs 
        for rep in *
        do
           mv -i "${REPFICHIERS}/${rep}".* "${rep}/"
        done

        petits points :

        • j'ai présupposé que dans le dossier des utilisateurs, il n'y a que des dossiers
        • c'est toujours bien de faire un backup avant de jouer avec des scripts non testés :)
        • si dans le dossier des utilisateurs il y a autre chose que des dossiers, il faut remplacer la boucle for
        for rep in */
        do
           mv -i "${REPFICHIERS}/${rep%/}".* "${rep}"
        done

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.