Saya mencoba mencari cara untuk segera memindahkan file ke folder lain segera setelah muncul di dropbox saya di CentOS.
Saya telah menjelajahi internet untuk mencari beberapa petunjuk tetapi saya tidak bisa lebih jauh dari kenyataan bahwa saya perlu menggunakan inotify
untuk memanggil skrip yang akan memproses file seperti yang terlihat.
Pengetahuan BASH saya sangat terbatas dan saya ragu saya bisa menulis ini dalam PHP.
Dengan kata lain, bagaimana saya bisa memindahkan file ke folder lain segera setelah muncul menggunakan inotify
?
Jawaban:
Ini adalah pendekatan sederhana:
Dengan detail lebih lanjut tentang jenis file yang ingin Anda pindahkan, Anda dapat menambahkan beberapa pemeriksaan, pencatatan dll ...
sumber
create
acara tidak benar, karena Anda akan melakukanmv
pada file yang mungkin tidak sepenuhnya disalin pada disk. Lihat jawaban @Gilles,close_write
sebagai gantinya gunakan acara.Perintah
inotifywait
mencetak pesan setiap kali isi dari direktori yang ditentukan berubah. Anda harus memilih acara yang tepat: bukan saat file dibuat, tetapi ketika Dropbox selesai mengunduhnya. Saya tidak tahu persis bagaimana Dropbox beroperasi. Jika menulis ke file di tempat terakhirnya, dengarkanclose_write
acara. Jika itu menulis ke file ke lokasi sementara dan kemudian memindahkannya ke tempatnya, dengarkanmoved_to
acara. Lulus pilihan-m -q
untukinotifywait
sehingga membuat mendengarkan untuk acara (secara default, hanya menunggu acara berikutnya) dan hanya mencetak pesan yang relevan.sumber
inotifywait
menghasilkan nama file yang diakhiri null. Yang terbaik yang bisa saya lakukan adalah menggunakan karakter yang lebih kecil kemungkinannya daripada baris baru, misalnya%f$'\001'
, dan digunakan-d $'\001'
denganwhile IFS= read -r
atauxargs
.inotifywait
itu mengganggu seperti itu. Anda dapat menggunakan sesuatu seperti//%f
, karena nama file tidak akan pernah mengandung garis miring ganda selama jalur untuk menonton tidak; maka gangguan ada di sisi parsing.