Я также на стороне "альтернативного решения" забора.
Если у вас есть доступ к журналу вашего FTP-сервера, я предлагаю настроить этот журнал, чтобы следить за успешной загрузкой. Такой подход, инициируемый событиями, будет быстрее, надежнее и менее загружен, чем подход опроса, подобный описанному в вашем вопросе.
То, как вы справитесь с этим, конечно, будет зависеть от вашего FTP-сервера. У меня есть один запущенный vsftpd , чьи журналы включают в себя такие строки:
Fri Mar 23 07:36:02 2012 [pid 94378] [joe] OK LOGIN: Client "10.8.7.16"
Fri Mar 23 07:36:12 2012 [pid 94380] [joe] OK UPLOAD: Client "10.8.7.16", "/path/to/file.zip", 8395136 bytes, 845.75Kbyte/sec
Fri Mar 23 07:36:12 2012 [pid 94380] [joe] OK CHMOD: Client "10.8.7.16", "/path/to/file.zip 644"
Строка UPLOAD
добавляется только тогда, когда vsftpd успешно сохранил файл. Вы можете разобрать это в сценарии оболочки следующим образом:
#!/bin/sh
tail -F /var/log/vsftpd.log | while read line; do
if echo "$line" | grep -q 'OK UPLOAD:'; then
filename=$(echo "$line" | cut -d, -f2)
if [ -s "$filename" ]; then
# do something with $filename
fi
fi
done
Это не самый модный сценарий оболочки, и, если честно, я бы написал его немного иначе, если бы использовал его сам, но это достаточно хорошо иллюстрирует идею.