Ich versuche einen Weg zu finden, eine Datei sofort in einen anderen Ordner zu verschieben, sobald sie in meiner Dropbox unter CentOS angezeigt wird.
Ich habe das Internet nach Hinweisen durchsucht, aber ich komme nicht weiter als bis zur Tatsache, dass ich inotify
ein Skript aufrufen muss, das die Datei so verarbeitet, wie sie angezeigt wird.
Meine BASH-Kenntnisse sind sehr begrenzt und ich bezweifle, dass ich dies in PHP schreiben kann.
Mit anderen Worten, wie kann ich eine Datei in einen anderen Ordner verschieben, sobald sie mit angezeigt wird inotify
?
Antworten:
Dies ist ein einfacher Ansatz:
Mit weiteren Details zu den Dateitypen, die Sie verschieben möchten, können Sie Überprüfungen, Protokollierungen usw. hinzufügen.
quelle
create
Ereignisses ist nicht korrekt, da Siemv
eine Datei bearbeiten, die möglicherweise nicht vollständig auf die Festplatte kopiert wurde. Siehe @ Gilles Antwort, stattdessenclose_write
Ereignis verwenden.Der Befehl gibt
inotifywait
jedes Mal eine Nachricht aus, wenn sich der Inhalt des angegebenen Verzeichnisses ändert. Sie müssen das richtige Ereignis auswählen: Nicht wenn die Datei erstellt wird, sondern wenn Dropbox den Download abgeschlossen hat. Ich weiß nicht genau, wie Dropbox funktioniert. Wenn es an seiner endgültigen Stelle in die Datei schreibt, hören Sie sichclose_write
Ereignisse an. Wenn es in die Datei an einen temporären Speicherort schreibt und sie dann an ihren Platz verschiebt, hören Sie sichmoved_to
Ereignisse an. Übergeben Sie die Optionen-m -q
an,inotifywait
damit sie weiterhin auf Ereignisse warten (standardmäßig wartet sie nur auf das nächste Ereignis) und nur relevante Nachrichten druckt.quelle
inotifywait
nullterminierte Dateinamen auszugeben. Das Beste, was ich tun konnte, war, ein Zeichen zu verwenden, das weniger wahrscheinlich als beispielsweise Zeilenumbruch ist%f$'\001'
, und es-d $'\001'
mitwhile IFS= read -r
oder zu verwendenxargs
.inotifywait
das nervt so. Sie können so etwas wie verwenden//%f
, da der Dateiname niemals einen doppelten Schrägstrich enthält, solange der zu überwachende Pfad dies nicht tut. dann ist der Ärger auf der Parsing-Seite.