Comment puis-je détecter immédiatement lorsque de nouveaux fichiers sont ajoutés à un dossier dans un script bash ? Je voudrais que le script traite les fichiers dès qu'ils sont créés dans le dossier. Existe-t-il d'autres méthodes que la planification d'une tâche cron qui recherche de nouveaux fichiers chaque minute environ ?
Réponse acceptée :
Vous devriez envisager d'utiliser inotifywait
, par exemple :
inotifywait -m /path -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'"
# do something with the file
done
Dans Ubuntu inotifywait
est fourni par inotify-tools
emballer. À partir de la version 3.13 (actuelle dans Ubuntu 12.04) inotifywait
inclura le nom de fichier sans l'option -f. Les versions plus anciennes peuvent avoir besoin d'être forcées. Ce qu'il est important de noter, c'est que le -e
option pour inotifywait
est la meilleure façon de filtrer les événements. Aussi, votre read
La commande peut affecter la sortie positionnelle à plusieurs variables que vous pouvez choisir d'utiliser ou d'ignorer. Il n'est pas nécessaire d'utiliser grep/sed/awk pour prétraiter la sortie.