Назад | Перейти на главную страницу

Загрузка по FTP в Linux: «Нет такого файла или каталога», но файл существует

Я хочу загрузить архивы резервных копий с одного сервера на другой по ftp. В моем резервном cronjob я использую этот скрипт для загрузки файлов:

MEDIAFILE=/var/somedir/somefile.encrypted
if [ -r $MEDIAFILE ]
# File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
put $MEDIAFILE
quit
END_SCRIPT
fi

Этот скрипт возвращает:/var/somedir/somefile.encrypted: нет такого файла или каталога. Но файл существует, и пользователь, выполняющий сценарий, имеет право читать файл.

Что вызывает эту ошибку?

Хорошо, я должен был сделать это для начала:

FTPHOST="domain.com"
FTPUSER="xxxxxx"
FTPPASS="xxxxxxxxx"
MEDIAFILE=/path/to/something.enc
if [ -r $MEDIAFILE ]
# File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
bin
put $MEDIAFILE something.enc
quit
END_SCRIPT
fi

Я добавил удаленное имя файла, и команда bin - протестирована и работает - надеюсь, поможет.

Изменить: я должен объяснить - команда put будет предполагать, что удаленный путь совпадает с локальным путем, если удаленный путь не указан (второй параметр) - поэтому без удаленного пути файл не был найден на удаленном сервере.

Знак доллара не следует использовать при присвоении значения переменной. Так что попробуйте этот код:

MEDIAFILE="/var/somedir/somefile.encrypted"
if [ -r $MEDIAFILE ]; # File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
put $MEDIAFILE
quit
END_SCRIPT
fi