2010-10-26 4 views
0

Comment puis-je surveiller un répertoire et envoyer un courrier électronique à chaque fois qu'un nouveau fichier est créé?Script OS X pour envoyer un courrier électronique lors de la création d'un nouveau fichier

J'ai actuellement un script en cours d'exécution quotidienne qui utilise trouver pour rechercher tous les fichiers dans un répertoire avec un Dernière modification la date plus récente que un fichier horodatage vide:

#!/bin/bash 
folderToWatch="/Path/to/files" 
files=files.$$ 
find $folderToWatch/* -newer timestamp -print > $files 
if [ -s "$files" ] 
then 
# SEND THE EMAIL 
touch timestamp 

Malheureusement, envoie également des courriels lorsque les fichiers sont modifiés. Je sais que la date de création n'est pas stockée dans Unix, mais cette information est disponible dans le Finder, donc puis-je modifier mon script pour utiliser cette date d'information plutôt que dernière modification?

Répondre

1

commande Snow Leopard find a une première -Bnewer qui compare « l'heure de naissance » (aka inode temps de création) à Modifions heure de fichier l'horodatage du fichier, il devrait donc faire à peu près ce que tu veux. Je ne suis pas sûr exactement quand cette fonctionnalité a été ajoutée; il est là en 10.6.4, pas en 10.4.11, et je n'ai pas une machine 10.5 à portée de main. Si vous avez besoin que cela fonctionne sur une version antérieure, vous pouvez utiliser stat pour truquer, quelque chose comme ceci:

find "$folderToWatch"/* -newer timestamp -print | \ 
    while IFS="" read file; do 
     if [[ $(stat -f %B "$file") > $(stat -f %m timestamp) ]]; then 
      printf "%s\n" "$file" 
     fi 
    done >"$files" 
+0

Génial! Je vous remercie. * Facepalm * J'aurais dû aller au manuel. – mojojojo

1

Vous pouvez maintenir un manifeste:

new_manifest=/tmp/new_manifest.$$ 
(cd $folderToWatch; find .) > $new_manifest 
diff manifest $new_manifest | perl -ne 'print "$1\n" if m{^> \./(.*)}' > $files 
mv -f $new_manifest manifest 
+0

Ah, très vrai! Je vais aller cette route si l'attribut "date de création" n'est pas accessible. – mojojojo

+0

FYI, cette approche est plus fiable que "date de création" puisque les fichiers peuvent parfois être créés avec des horodatages plus anciens. –

+0

Les seuls fichiers qui m'intéressent vraiment sont ceux téléchargés via FTP, qui, lors de mes tests, ont tous des dates de création de l'heure de téléchargement. Mais c'est un bon point; les fichiers transférés via Finder n'obtiennent pas de nouvelles dates de création. – mojojojo

Questions connexes