Это потому, что команда FTP поместит $FILE
поместит файл $FILE
в любую 'текущую директорию' на стороне сервера FTP; следовательно, в корневую директорию сервера FTP (которая расположена на C:\content).
Сначала нужно извлечь подкаталог из вывода inotifywait
's %w
, а затем подготовить FTP-команду cd
к параметру lftp
.
Я никогда раньше не использовал inotifywait
, но думаю, что скрипт должен быть таким:
inotifywait -q -r -m -e close_write,moved_to . --format "%w %f" |
while read DIR FILE; do
lftp -e "cd $DIR; put $FILE; exit" -u user,password -p 2121 ftp.server-a.com
done
PS: Никогда не стоит явно писать пароль в скрипте. Вместо этого используйте rsync
; в Windows вам нужно будет установить rsync
сервер. Я лично использую Cygwin, и использую cygrunsrv
, чтобы заставить rsync
работать как служба Windows.
@pepoluan дал мне ответ, но я хотел сообщить о сценарии, который у меня получился, который немного отличается (причина, по которой я сделал это в ответе, а не в комментарии: вы не можете разметить код в комментарии)
#!/bin/bash
cd /files
inotifywait -q -r -m -e close_write,moved_to . --format "%w %w%f" |
while read DIR FILE; do
lftp -e "mkdir -p $DIR; cd $DIR; put $FILE; exit" -u user,pass -p 2121 ftp.server-a.com
done