Unixでmputを使用して複数のフォルダーを別のサーバーにFTPで転送するにはどうすればよいですか?


18

サーバーにログインしています(Puttyを使用)。そこからFTPを使用して別のサーバーに接続しています。mputを使用して、最初のサーバーから2番目のサーバーにいくつかのフォルダーをコピーしたい。

お気に入り:

ftp> mput folder1 folder2 folder3

しかし、「folder1:not a plain file ....」などが表示されます。これらの各フォルダーには、サブフォルダー、ファイル(一部のバイナリー、一部のバイナリーではない)があります。

アイテムを圧縮せずに転送したいのですが、どうすれば目的を達成できますか?

回答:


19

コマンドラインFTPは非常に原始的です。

リモートサイトにファイル/フォルダーを再帰的に送信することはできません。

ローカル側と同じリモート側でディレクトリ構造を再作成する場合は、mkdir各パスを手動で使用mput *して、そのディレクトリ内のすべてをリモート側に送信する必要があります。

これを簡単にする2つのオプション:

  1. プリミティブFTPコマンドの使用を停止します(ncftpが適切な代替手段です)

  2. tarを使用して、フォルダーをtarし、ファイルを送信し、反対側で抽出します。


1
tar-> put-> untarしのための1
デイブ

1
-1質問は「ものを圧縮してから転送せずに必要なことをどのように達成できますか?」と尋ねるため、その人はリモートマシンへのシェルアクセスを持っていないことを意味します。
スティーンシューット

11

mputは再帰を使用しないため、これは通常のftpプログラムでは不可能です。ncftpを使用して、「mput -r folder」を呼び出すことができます。

よろしくお願いします、ファビアン


それはまさに私が最近RHEL 5ボックスでやったことです。EPELパッケージでは、実行可能ファイルの名前はncftpputです。
サプレッサ

サーバーの構成を変更することはできません。私はただのユーザーです...

クライアントに依存します。サーバー上ではありません。
ハーフダン2009

私はこの方法を好む。ありがとうございました。
Mojtaba Rezaeian

11

bashスクリプトを作成しました:

#!/bin/bash
ftp_site=ftp.yoursite.net
username=my_user_name
passwd=my_password
remote=/path/to/remote/folder
folder=$1
cd /path/to/local/folder/$folder
pwd
ftp -in <<EOF
open $ftp_site
user $username $passwd
mkdir $remote/$folder
cd $remote/$folder
mput *
close
bye

そしてそれを

find . -type d -exec ./recursive-ftp.sh {} \;

動作するようです。


0

Secure Copy scpには、役に立つ可能性のある-r再帰フラグがあります。


質問は単純なftpアクセスについてです。scp/ sftpではありません!
Mojtaba Rezaeian

-1

アップロードするディレクトリにpowershell cdを開き、次のコマンドを実行します。

1. gci -r | % {if ($_.PSIsContainer) {$t = $((($_.fullname -split "\\")[$(((pwd) -split "\\").length)..200]) -join "/"); "mkdir ""$t""`r`nmput ""$t/*"" ""$t"""}} | sc .\mput_all
2. notepad .\mput_all

結果をFTPウィンドウに貼り付けます。楽しい。また、ベースディレクトリからすべてのファイルを転送するためにmput *を追加することを忘れないでください。


6
PowerShellはいつUnixシステムで実行されますか?
マイケルハンプトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.