web-dev-qa-db-fra.com

Déplacement de fichiers avec des scripts bash

J'ai un script bash qui surveille un dossier. Si quelque chose est ajouté au dossier, le script déplacera tout le contenu du dossier surveillé vers la destination définie.

LE PROBLÈME: - Le script ne parvient pas à déplacer les fichiers du dossier surveillé vers le dossier de destination via FileZilla (FTP). Le script fonctionne si vous déplacez le fichier dans le dossier surveillé manuellement via une invite du shell. FTP est le seul format qui ne fonctionne pas correctement.

Des idées ce que le problème peut être?

Voici le script:

inotifywait -m ~/folderA/fileA -e moved_to |
    while read path action file; do
        #echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    mv ~/folderA/fileA/* "/folderB/myNewDest"
    done
5
JakePember

Premièrement, en surveillant inotifywait -e moved_to uniquement les fichiers déplacés dans le répertoire cible, vous omettez la surveillance des fichiers écrits ou écrasés là, par exemple, Filezilla. Ajoutez -e modify -e create à votre commande ou, sauf si vous avez une raison convaincante d'ignorer certains événements inotifywait, supprimez toutes les options -e whatever.

Deuxièmement, en ne citant pas les fichiers from dans votre commande mv ~/folderA/fileA/* "/folderB/myNewDest", vous courez le risque d’être surpris par des noms de fichiers idiots, par exemple. foo;rm -rf *. je voudrais suggerer

find ~/folderA/fileA/ -maxdepth 0 -type f -print0 | \
xargs -0 mv --target-directory=/folderB/myNewDest --

qui fait la même chose, mais plus en toute sécurité.

6
waltinator