Próbuję znaleźć sposób na natychmiastowe przeniesienie pliku do innego folderu, gdy tylko pojawi się on w moim dropboxie na CentOS.
Przeszukałem Internet w poszukiwaniu wskazówek, ale nie mogę uzyskać nic poza faktem, że muszę użyć, inotify
aby wywołać skrypt, który przetworzy plik, jak się pojawi.
Moja wiedza BASH jest bardzo ograniczona i wątpię, czy mogę to napisać w PHP.
Innymi słowy, jak mogę przenieść plik do innego folderu, gdy tylko się pojawi inotify
?
Odpowiedzi:
To proste podejście:
Więcej informacji o typach plików, które chcesz przenieść, możesz dodać sprawdzanie, rejestrowanie itp.
źródło
create
zdarzenia nie jest poprawne, ponieważ zrobiszmv
plik, który może nie zostać w pełni skopiowany na dysk. Zobacz odpowiedź @Gilles, używającclose_write
zamiast tego zdarzenia.Polecenie
inotifywait
drukuje komunikat za każdym razem, gdy zmienia się zawartość określonego katalogu. Musisz wybrać właściwe zdarzenie: nie po utworzeniu pliku, ale po zakończeniu pobierania przez Dropbox. Nie wiem dokładnie, jak działa Dropbox. Jeśli zapisuje do pliku na swoim ostatecznym miejscu, słuchajclose_write
wydarzeń. Jeśli zapisuje plik w tymczasowej lokalizacji, a następnie przenosi go na miejsce, nasłuchujmoved_to
wydarzeń. Przekaż opcje-m -q
do,inotifywait
aby dalej nasłuchiwał zdarzeń (domyślnie czeka tylko na następne zdarzenie) i drukuje tylko odpowiednie wiadomości.źródło
inotifywait
wyświetlanie nazw plików zakończonych znakiem null. Najlepsze, co mogłem zrobić, to na przykład użyć znaku, który jest mniej prawdopodobny niż nowa linia%f$'\001'
, i użyć-d $'\001'
zwhile IFS= read -r
lubxargs
.inotifywait
irytuje w ten sposób. Możesz użyć czegoś takiego//%f
, ponieważ nazwa pliku nigdy nie będzie zawierać podwójnego ukośnika, o ile ścieżka do obejrzenia nie; wtedy irytacja jest po stronie parsowania.