Bagaimana cara mengunggah direktori secara rekursif ke server FTP hanya dengan menggunakan ftp atau lftp?

19

Saya menulis skrip shell Linux untuk menyalin direktori lokal ke server jauh (menghapus file yang ada).

Server lokal: ftp dan lftpperintah tersedia, tidak ada ncftp atau alat grafis apa pun.

Server jauh: hanya dapat diakses melalui FTP. Tidak ada rsync atau SSH atau FXP.

Saya berpikir tentang daftar file lokal dan jarak jauh untuk menghasilkan skrip lftp dan kemudian menjalankannya. Apakah ada cara yang lebih baik?

Catatan: Mengunggah hanya file yang dimodifikasi akan menjadi nilai tambah, tetapi tidak diperlukan.

Nicolas Raoul
sumber
ncftp benar-benar keluar dari pertanyaan? Akan lebih mudah imho. (dan saya tahu itu akan melakukannya saat saya menggunakannya)
Sirex
Sirex: Saya lebih suka melakukannya dengan alat yang datang secara default di RedHat. Jika lftp terbukti tidak dapat digunakan, saya akan menambahkan persyaratan bagi pengguna untuk menginstal ncftp.
Nicolas Raoul
Sintaks untuk wput(pengunggah ftp wget-like):wput dir/ ftp://user:pass@host/dir
kenorb

Jawaban:

39

lftp harus dapat melakukan ini dalam satu langkah, khususnya dengan lftp mirror:

EDIT: sintaks perintah lftp membingungkan, doa asli yang saya posting tidak berfungsi. Coba seperti ini:

lftp -e "mirror -R {local dir} {remote dir}" -u {username}, {password} {host}

catat kutipan di sekitar argumen ke -esakelar.

Phil Hollenback
sumber
1
+1 memberi tahu saya bahwa mode mirror lftp berfungsi bahkan jika FXP tidak tersedia (saya yakin sebaliknya setelah membaca tutorials.papamike.ca/pub/lftp.html yang mengatakan "kedua server harus mendukung protokol ini agar operasi ini berhasil "). Namun, perintah khusus ini gagal pada server Ubuntu saya: lftp: mirror: Nama atau layanan tidak dikenal, Perintah tidak dikenal `-R '.
Nicolas Raoul
Saya menulis ulang jawaban saya dengan doa lftp yang lebih baik, semoga itu membantu.
Phil Hollenback
Akhirnya aku berhasil! Tampaknya Anda harus beralih dari jauh dan lokal agar dapat berfungsi. Harap perbarui dan saya akan menerima jawaban ini. Berikut ini adalah baris perintah yang berfungsi: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Nicolas Raoul
Saya pikir saya melihat di dokumen lftp bahwa Anda harus mengganti dir lokal dan remote ketika menggunakan -R tapi saya pasti lupa. Memperbarui jawaban saya.
Phil Hollenback
Bagaimana bisa gagal? Sudahkah Anda mencoba menjalankan 'lftp -vvv' untuk keluaran verbose yang lebih banyak untuk menentukan apa yang ia coba lakukan?
Phil Hollenback
1

Berdasarkan ide Phil menggunakan mode cermin lftp, perintah ini melakukan trik:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

Kekurangannya adalah ia membutuhkan server lokal untuk menjalankan server FTP.

Nicolas Raoul
sumber
1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

Ini berhasil bagi saya, banyak upaya lain gagal. Setelah di lftp, info lebih lanjut tersedia melalui:

help mput
austin
sumber
2
Mungkin akan lebih baik untuk digunakan di mirror -Rsini.
gauteh
@gauteh kamu benar. jawaban terbaik ^
austin
0

Akhirnya mendapat jawabannya !!! Buat skrip shell ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Path = direktori lokal yang ingin kita salin ke server ftp
  • username = nama pengguna server ftp
  • kata sandi = kata sandi server ftp
  • ftp-server-ip = alamat IP server ftp

Jika paket lftp tidak diinstal, instal dengan yum.

Kiran Zinjurde
sumber