抜け穴

抜け穴

を使用するシェルスクリプトを作成していますscp。ターゲットディレクトリが存在しない場合は、誤解を招くエラーメッセージが表示されます。つまり:

scp user@remote-host:/path/to/existing/file /local/non-existing/directory/

私が受け取ったエラーは次のとおりです。

/local/non-existing/directory/: Is a directory

謎ですね…

Directory /local/non-existing/directory/ does not exist
  1. これが誰にでも理解できるのか、それとも私だけそうなのか?
  2. これがscpの欠陥だと思いますか?
  3. 私はUbuntu 14.04.3 LTSを実行しています。他のオペレーティングシステムでも同様ですか?

答え1

抜け穴

それを発見関連エラー。 Ubuntu 14.04.5(openssh 1:6.6p1-2ubuntu2.8)で修正されたようです。

の説明があります。Red Hatのバグレポート:

この問題は、raw openSSHにも存在し、既存の親ディレクトリがある存在しないディレクトリに何かをコピーしようとしたときに発生します。この境界条件の確認がありません。 scpプロセスが上記のファイルに書き込もうとするとエラーメッセージが表示されますが、ファイルがスラッシュ(ディレクトリの解釈)で終わり、これが現在のエラーメッセージの理由です。

元の答え

再現できません(Ubuntu 14.04.5 LTSおよびLinux Mint 17でテスト)。

  • /local/non-existing/directory存在しない場合は、次のようscpに失敗します。

    /local/non-existing/directory: No such file or directory
    
  • /local/existing/directoryある場合は、次にscpコピーしてください。file/local/existing/directory/file

  • remote-host:/path/to/existing/fileディレクトリの場合、scp次のように失敗します。

    scp: file: not a regular file
    

トラブルシューティング

ssh user@remote-host "file /path/to/existing/file"

リモートファイル(またはディレクトリ)に関する情報を提供する必要があります。

file /local/non-existing/directory/

あなたのローカルディレクトリに関する情報を提供する必要があります

mkdir -p /local/non-existing/directory/

必要に応じて、ディレクトリは親ディレクトリと共に繰り返し作成されます。

その後、mkdir -pそれがfile実際にファイルであり、/local/non-existing/directory/実際にディレクトリである場合、コマンドscpは機能します。

関連情報