Script avec FIND

Résolu
Bonjour,

je cherche à Uploader des fichiers "récents" et de manière récursive sur un serveur distant.
j'utilise NCFTP en ligne de commande pour l'Upload.
Il me faudrait un script du genre

-find mon_repertoire -ctime -7
recuperer la liste de fichiers avec le chemin
puis faire une boucle
ncftpput fichier_trouvé

Merci d'avance de vos réponses.

11 réponses

Résumé de la discussion

Le sujet porte sur l'upload récursif de fichiers récemment modifiés vers un serveur distant en utilisant ncftp en ligne de commande, avec une sélection des fichiers grâce à find et des critères -ctime ou -mtime. Des solutions proposées montrent l'envoi via une boucle qui lit la liste produite par find et appelle ncftpput avec les options -R et -m, parfois en passant par un fichier ncftp.cfg. Des difficultés remontent, comme des fichiers transférés à la racine du répertoire distant, des doublons et une arborescence mal respectée, conduisant à des ajustements répétitifs de la logique. En cas de besoin, certains suggèrent de copier localement l'arborescence ciblée avec une boucle find + cp -r, puis d'envoyer l'ensemble pour mieux maintenir la hiérarchie.

Bobot (l’IA à votre service)
  1. for f in 'find /home/mon_repertoire/* -ctime -7'; do
    ncftpput user,pass,serveur, "$f"
    done

    c'est un début, mais je ne récupère pas l'arborescence... tout arrive à la racine de mon répertoire distant
    0
    1. Contributeur
      Salut,

      Et un :

      ncftpput user,pass,serveur < <(find /home/mon_repertoire/* -ctime -7)

      Ne marcherait-il pas ?
      0
      1. Contributeur
        Oups j'avais pas vu ton édit ;-\

        ncftpput user,pass,serveur /répertoire/destination < <(find /home/mon_repertoire/* -ctime -7)
        0
        1. Pareil, tout arrive à la racine du répertoire distant :-/
          0
          1. Contributeur
            Et avec "répertoire/destination" (sans le slash synonyme de racine devant) ?
            0
            1. for f in 'find . -ctime -7'; do
              ncftpput -R user,pass,serveur, "$f" // -R est une option de recursivité avec ncftp
              done

              Pour le coup, c'est récursif... mais un peu trop... J'ai tous les fichiers à la racine ainsi que dans les sous-répertoires (qui ont étés finalement crées)

              ça avance doucement...
              0
              1. Contributeur
                J'ai tous les fichiers à la racine
                Mais ce n'est pas la conséquence de la récursivité, mais le résultat de tes tests précédents, non ?
                0
                1. J'ai relancé le test en supprimant tout du serveur distant, les fichiers sont bien en double (à la racine et dans les sous-répertoires) :-/

                  je peux peut-être recréer localement dans répertoire de travail l'arborescence avec une boucle find + cp -r ?
                  puis envoyer ça? Car pour l'envoi d'un dossier entier la récursivité marche bien.

                  une idée de boucle pour copier les fichiers récents dans un répertoire local, conservant l'arborescence?
                  Merci encore zipe31!
                  0
                  1. Contributeur
                    ncftpput -R user,pass,serveur, "$f"
                    C'est la syntaxe tel que tu l'emploies ?

                    Tu peux essayer avec :

                    ncftpput -R -u user -p password ftp://ton_serveur rep/destination "${f}"
                    0
                    1. Contributeur
                      Bon, après de multiples essais je crois avoir une bonne piste ;-))

                      Je plante le décor...

                      Dans mon répertoire actuel, un répertoire (rep/) avec un sous-répertoire (rep/sous-rep/) contenant 2 fichiers texte (rep/sous-rep/toto.txt et rep/sous-rep/fich.txt).

                      Sur mon ftp un répertoire "backup" à la racine.

                      Donc pour envoyer les 2 fichiers "fich.txt" et "toto.txt" sur le ftp dans "backup" tout en conservant l'arborescence :

                      $ while read f; do ncftpput -R -m -f ncftp.cfg backup/"${f%/*}/" "${f}";done < <(find rep/ -type f) 
                      rep/sous-rep/toto.txt:                                   0.00 B     0.00 B/s  
                      rep/sous-rep/fich.txt:                                   0.00 B     0.00 B/s

                      J'ai donc maintenant sur mon ftp :

                      backup/
                                rep/
                                     sous-rep/
                                                   toto.txt
                                                   fich.txt

                      ;-))

                      0
                      1. Merci zipe pour le suivi :-)
                        la piste sent très bon...
                        la copie récursive sur le serveur distant marche bien maintenant,
                        par contre le find n'est plus pris en compte, ça prend tout.

                        j'ai lancé mon find indépendamment du script, il marche bien...

                        c'est vraiment pas loin de marcher!
                        0
                        1. Contributeur
                          Comment l'intègres-tu (le find) à ta commande ftp ?
                          Lances-tu la commande ftp depuis un shell ou depuis un script ?
                          0
                        2. depuis un script
                          0
                        3. Contributeur
                          De quelle façon ?
                          0
                        4. la dernière tentative:

                          while read f;
                          do ncftpput -R -m -f ncftp.cfg backup/"${f%/*}/" "${f}" < find . -mtime -1;
                          done

                          c'est pas sorti de la boucle :-/
                          0
                        5. Contributeur
                          Normal ;-((

                          while read f;
                          do ncftpput -R -m -f ncftp.cfg backup/"${f%/*}/" "${f}" 
                          done < <(find . -mtime -1)
                          0