2010-09-28 28 views

Trả lời

9

Tôi không nghĩ rằng có một cách để sao chép tệp mà không tải xuống và tải lên lại, ít nhất tôi không tìm thấy gì giống như thế này trong List of FTP commands và không có khách hàng nào tôi đã thấy cho đến nay hỗ trợ một cái gì đó như thế này.

9

Có, chính giao thức FTP có thể hỗ trợ điều này theo lý thuyết. Các FTP RFC 959 thảo luận về điều này trong phần 5.2 (xem đoạn bắt đầu với "Khi dữ liệu được chuyển giữa hai máy chủ, A và B ..."). Tuy nhiên, tôi không biết bất kỳ khách hàng nào cung cấp loại hoạt động điều khiển máy chủ kép này. Lưu ý rằng phương pháp này có thể chuyển tệp từ máy chủ FTP sang chính nó bằng mạng riêng của nó, nó sẽ không nhanh như bản sao tệp cục bộ nhưng hầu như chắc chắn sẽ nhanh hơn tải xuống và sau đó tải lại tệp lên.

+1

Tôi tự hỏi nếu bạn sử dụng này và quy định localhost nếu bạn có thể nhận được xung quanh cổ chai nhỏ. Mặc dù vậy, chúng ta cần phải xem xét rằng nhiều máy chủ FTP chặn FXP (còn được gọi là chuyển máy chủ đến máy chủ) do "các cuộc tấn công trả lại FTP". Nhưng một máy chủ FTP thông minh sẽ không chặn nó cho localhost. Tuy nhiên, nó có thể chỉ chặn tất cả FXP. – SilentSteel

0

Tôi đã quản lý để thực hiện việc này bằng cách sử dụng WebDrive để gắn kết ftp làm thư mục cục bộ, sau đó "tải xuống" tệp bằng cách sử dụng tệpzilla trực tiếp vào thư mục. Đó là một chút chậm hơn so với tải bình thường là, nhưng bạn không cần phải có không gian trên hdd của bạn.

+0

Tôi nghĩ rằng nó sẽ vẫn tải về tập tin tạm thời vào máy tính của bạn và sau đó ngay lập tức tải nó lên webdrive của bạn. Tôi nghi ngờ bạn vẫn sẽ yêu cầu không gian đĩa đầy đủ để đạt được điều đó. –

-4

Bạn có thể đổi tên tệp để được sao chép vào đường dẫn đầy đủ của kết quả bạn muốn.

Ví dụ: Nếu bạn muốn di chuyển các tập tin "file.txt" vào thư mục "NewFolder" bạn có thể viết nó như

ftp> rename file.txt NewFolder/file.txt 

này đã làm việc cho tôi.

+1

Điều này bỏ lỡ điểm của câu hỏi - OP yêu cầu rõ ràng về * sao chép *, không phải về * di chuyển * – codeling

1

Tôi có thể sao chép tệp giữa các thư mục từ xa trong các hệ thống dựa trên Linux. Trong trường hợp đặc biệt của tôi, tôi đang sử dụng rất phổ biến trình quản lý file PCManFM:

  • Menu "Go" -> "Kết nối đến máy chủ" info
  • FTP đăng nhập, vv
  • mở tab mới trong PCManFM
  • Kết nối với cùng một máy chủ
  • Sao chép từ tab này sang tab ...

đó là một chút chậm, vì vậy tôi đoán rằng nó có thể được tải về và tải lên lưng tệp, nhưng nó được thực hiện tự động và rất thân thiện với người dùng.

13

Không có cách nào tiêu chuẩn để sao chép tệp từ xa qua giao thức FTP. Một số máy chủ FTP hỗ trợ các phần mở rộng độc quyền hoặc không chuẩn cho việc này.


Một số ứng dụng khách FTP hỗ trợ sao chép tệp từ xa. Hoặc sử dụng các phần mở rộng hoặc thông qua một bản sao cục bộ tạm thời của tập tin từ xa.

Ví dụ WinSCP FTP client không support the duplication sử dụng cả kéo & thả và lệnh đơn/bàn phím:

  • Nó hỗ trợ phần mở rộng FTP SITE CPFR/CPTO (hỗ trợ ví dụ bằng các ProFTPD mod_copy module)
  • Nó rơi trở lại một sao chép tự động qua một bản sao tạm thời cục bộ, nếu phần mở rộng ở trên không có sẵn.

(Tôi là tác giả của WinSCP)


workaround khác là để mở một kết nối thứ hai đến máy chủ FTP và làm cho máy chủ tải lên các tập tin vào bản thân bởi đường ống một chế độ thụ động kết nối dữ liệu với kết nối dữ liệu chế độ hoạt động. Giải pháp này được hiển thị trong answer by @SaadAchemlal.

+6

Tôi muốn cảm ơn bạn vì công cụ tuyệt vời đó là WinSCP. – Fatih

-2

Bạn có thể thực hiện việc này từ C-Panel.

  1. Đăng nhập vào bảng điều khiển C của bạn.
  2. Đi vào trình quản lý tệp.
  3. Tìm tệp hoặc thư mục bạn muốn sao chép.
  4. Nhấp chuột phải và chọn Sao chép.
  5. Nhập vào đạo diễn mới bạn muốn sao chép vào.

Xong!

+4

1) không để lại một chữ ký trong bài viết của bạn, đó là nơi mà hồ sơ của bạn là dành cho 2) C-Panel chỉ có sẵn trong trường hợp rất cụ thể. – Glorfindel

1

Mã bên dưới làm cho máy chủ FTP tải tệp lên chính nó (sử dụng kết nối vòng lặp). Nó cần máy chủ FTP để cho phép cả chế độ kết nối thụ động và hoạt động.

Nếu bạn muốn hiểu các lệnh ftp đây là một danh sách của họ: List of ftp commands

function copyFile($filePath, $newFilePath) 
{ 
    $ftp1 = ftp_connect('192.168.1.1'); 
    $ftp2 = ftp_connect('192.168.1.1'); 
    ftp_raw($ftp1, "USER ftpUsername"); 
    ftp_raw($ftp1, "PASS mypassword"); 
    ftp_raw($ftp2, "USER ftpUsername"); 
    ftp_raw($ftp2, "PASS mypassword"); 

    $res = ftp_raw($ftp2, "PASV"); 
    $addressAndPort = substr($res[0], strpos($res[0], '(') + 1); 
    $addressAndPort = substr($addressAndPort, 0, strpos($addressAndPort, ')')); 

    ftp_raw($ftp1, "CWD ." . dirname($newFilePath)); 
    ftp_raw($ftp2, "CWD ." . dirname($filePath)); 
    ftp_raw($ftp1, "PORT ".$addressAndPort); 

    ftp_raw($ftp1, "STOR " . basename($newFilePath)); 
    ftp_raw($ftp2, "RETR " . basename($filePath)); 

    ftp_raw($ftp1, "QUIT"); 
    ftp_raw($ftp2, "QUIT"); 
} 
+0

@MartinPrikryl Vâng, hãy để tôi nói cho bạn biết nó hoạt động vì tôi sử dụng nó một cách cá nhân trên một Synology Nas. Hơn nữa nó trả lời câu hỏi bởi vì bạn chỉ cần tải tệp của bạn lên ftp một lần và sử dụng chức năng của tôi để sao chép nó bất cứ nơi nào bạn muốn mà không cần tải lên lại. Lần sau hãy thử kiểm tra giải pháp trước khi nói rằng nó không hoạt động :) –

+0

Xin lỗi, bạn nói đúng, tôi không đọc kỹ mã. Mặc dù thời gian tới, hãy đưa một số giải thích vào bài đăng của bạn để tránh nhầm lẫn. +1 + Tôi đã liên kết câu trả lời của bạn từ tôi. –

+0

Tôi sẽ cố gắng giải thích thêm lần sau. Cảm ơn bạn đã chỉnh sửa;) –

Các vấn đề liên quan