Surveillez un dossier OSX pour les changements de fichiers puis exécutez un script bash [duplicate]

10

Duplicata possible:
regarder le système de fichiers en temps réel sur OS X et Ubuntu

Je cherche une méthode efficace pour surveiller un répertoire local dans OSX et si des fichiers ont été modifiés dans ce répertoire, exécutez un script bash pour valider les fichiers dans github.

Des outils recommandés pour surveiller un répertoire pour les modifications de fichiers, puis déclencher une action, c'est-à-dire un script bash?

Tegan Snyder
la source
1
Cette question en l'état est une recommandation logicielle limite, qui n'est généralement pas autorisée sur Super User . Essayez de la reformuler pour poser votre question racine, "Comment puis-je automatiquement valider les modifications et pousser à partir d'un dépôt git chaque fois que des fichiers sont ajoutés / supprimés / modifiés?"
Dark Android
@DarthAndroid, selon la FAQ, cette question est correcte en l'état. L'OP ne demande pas de conseils d'achat ou d'achat.
ephsmith
1
@eph Le PO demande des recommandations pour quelque chose, qui est plutôt hors sujet. Le principal problème est cependant qu'ils n'expliquent pas leur problème et ne demandent que leur tentative de solution.
slhck
Le problème est simple. Surveillez un répertoire pour les modifications et validez ces modifications dans un référentiel. Tout est dans la question du PO. Le lien que vous avez fourni a la réponse. Bon appel.
ephsmith

Réponses:

19

Utilisation de fswatch depuis votre référentiel:

fswatch . 'git commit -avm "snapshot at ${date}"'

Cet exemple simple n'attraperait que les modifications apportées aux fichiers déjà dans le référentiel.

Pierre Carrier
la source
Cela peut être fait avec des actions de dossier intégrées à OS X. Voir la réponse via le lien fourni par slhk ci-dessus.
ephsmith
1
Vous pouvez développer votre réponse en ajoutant un exemple expliquant ce que le PO souhaite réaliser. La simple publication d'un lien n'est pas recommandée.
slhck
Cela semble encourageant. Je pense que je pourrais exécuter ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - J'ai essayé fswatchaprès avoir lu votre réponse. Excellent utilitaire - très similaire à inotifyLinux et utilise le natif d'OS Xfsevent
cwd
2

Une option serait d'utiliser simplement launchd. Enregistrez une liste de propriétés comme celle-ci sous ~/Library/LaunchAgents/com.superuser.445907.plistet chargez-la avec launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistou en vous déconnectant puis en vous reconnectant.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd enregistre uniquement les modifications apportées aux fichiers lorsqu'ils sont enregistrés atomiquement, ou supprimés et recréés chaque fois qu'ils sont enregistrés. La plupart des applications OS X effectuent des sauvegardes atomiques par défaut, mais par exemple TextMate et vim ne le font pas. Les changements dans les sous-dossiers des dossiers surveillés ne sont pas détectés.

launchctl unload $path && launchctl load $path applique les modifications à un plist.

Voir man launchdet man launchd.plistpour plus d'informations.

Lri
la source
Approche intéressante. Je vais y jeter un œil et vous recontacter. Merci pour les commentaires.
Tegan Snyder
Cette méthode a certainement ses limites. Vous ne pouvez pas détecter les modifications dans les sous-dossiers des dossiers surveillés. Cette technique ne vous dit pas non plus quel fichier a eu un événement (nouveau fichier, modification, suppression, etc.) - juste que le chemin a eu un événement.
Volomike