J'essaie de trouver un moyen de déplacer immédiatement un fichier vers un autre dossier dès qu'il apparaît dans ma boîte de dépôt sur CentOS.
J'ai parcouru Internet pour trouver des indices mais je ne peux pas aller plus loin que le fait que je doive utiliser inotify
pour invoquer un script qui traitera le fichier tel qu'il apparaît.
Mes connaissances BASH sont très limitées et je doute que je puisse écrire ceci en PHP.
En d'autres termes, comment puis-je déplacer un fichier vers un autre dossier dès qu'il apparaît en utilisant inotify
?
Réponses:
Il s'agit d'une approche simple:
Avec plus de détails sur les types de fichiers que vous souhaitez déplacer, vous pouvez ajouter quelques vérifications, journalisation, etc.
la source
create
événement n'est pas correcte, car vous ferez unmv
sur un fichier qui peut ne pas être entièrement copié sur le disque. Voir la réponse @Gilles, en utilisant l'close_write
événement à la place.La commande
inotifywait
imprime un message chaque fois que le contenu du répertoire spécifié change. Vous devrez choisir le bon événement: pas lorsque le fichier est créé, mais lorsque Dropbox a fini de le télécharger. Je ne sais pas exactement comment fonctionne Dropbox. S'il écrit dans le fichier à sa place finale, écoutez lesclose_write
événements. S'il écrit dans le fichier dans un emplacement temporaire, puis le place, écoutez lesmoved_to
événements. Passez les options-m -q
àinotifywait
pour qu'il continue d'écouter les événements (par défaut, il n'attend que l'événement suivant) et imprime uniquement les messages pertinents.la source
inotifywait
produire des noms de fichiers à terminaison nulle. Le mieux que je pouvais faire était d'utiliser un caractère moins probable que le saut de ligne, par exemple%f$'\001'
, et d'utiliser-d $'\001'
avecwhile IFS= read -r
ouxargs
.inotifywait
c'est ennuyeux de cette façon. Vous pouvez utiliser quelque chose comme//%f
, car le nom de fichier ne contiendra jamais de double barre oblique tant que le chemin à regarder ne le sera pas; alors l'ennui est du côté de l'analyse.