web-dev-qa-db-ja.com

Linux FTPアップロード:「そのようなファイルまたはディレクトリはありません」が、ファイルは存在します

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:No such file or directory。ただし、ファイルは存在し、スクリプトを実行するユーザーにはファイルを読み取る権限があります。

このエラーの原因は何ですか?

5
i.amniels

さて、私はこれを最初に行うべきでした:

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

Putするリモートファイル名を追加しました。binコマンド(テスト済みで動作します)が役立つことを願っています。

編集:説明する必要があります。リモートパスが指定されていない場合(2番目のパラメーター)、putコマンドはリモートパスがローカルパスと同じであると想定します。リモートパスがないと、リモートサーバーでファイルが見つかりませんでした。

7
cyberx86

変数に値を割り当てるときは、ドル記号を使用しないでください。したがって、次のコードを試してください。

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
2