Posso caricare un'intera cartella usando FTP?


29

Devo caricare una cartella completa tramite FTP. C'è qualche opzione per trasferire una cartella e tutto il suo contenuto in una volta?

Risposte:


24

Se si utilizza un client ftp della riga di comando standard, il MPUTcomando consente di trasferire tutti i file corrispondenti a un modello (stile shell globale), quindi MPUT *invierà tutti i file nella directory corrente. C'è anche MGETper recuperare i file corrispondenti a un modello.

Per impostazione predefinita, entrambi MPUTe MGETchiederanno se trasferire ciascun file prima di farlo. Probabilmente vorrai disattivare il prompt con il comando "PROMPT" (nessun argomento; è un interruttore).


Questa domanda originariamente proveniva da StackOverflow, quindi penso che dovrebbe essere la risposta accettata. Anche se il richiedente originale sembra essere svanito, quindi non ne accetterà uno ....
codetaku

Avvertenza: il client della riga di comando FTP fornito con Windows non supporta la modalità passiva, pertanto l'utilizzo di questa tecnica può farti perdere tempo. Lo ha fatto nel mio caso poiché avevo bisogno di caricare file e utilizzavo la riga di comando di Windows con gli strumenti installati in modo nativo.
sean2078,

1
Trasferirà tutti i file semplici nella directory corrente ma non trasferirà ricorsivamente le directory presenti. Li ignorerà in silenzio
bergercookie il

22

Puoi usare ncftpput. Eseguire le seguenti operazioni:

  1. Installa ncftp:

    yum install ncftp
    

yum è minuscolo.

In alternativa:

    apt-get install ncftp

2. Eseguire il comando seguente:

    ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*

Lo yum dovrebbe essere cambiato in yum, poiché è sensibile al maiuscolo / minuscolo.
olekeh,

1
Ecco tutte le opzioni della CLI per ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier



2

Un semplice tutorial per altri neofiti di Windows come me che finiscono qui:

Il modo più semplice per caricare un'intera cartella (con tutte le sottocartelle e i file in esse contenuti) è:

  1. Scarica NcFTP Client (è gratuito, ma puoi donare) da questo link .
  2. Scegli NcFTP Client 3.2.5 per Microsoft Windows dall'elenco.
  3. Installalo.
  4. Al termine, verrà visualizzata una piccola finestra CMD con un'icona di ciliegie. Non ne hai bisogno.
  5. Basta aprire una finestra CMD standard e digitare:
    ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (come una riga).

Nota che:

  • -R è una bandiera per "ricorsivo"; rende il comando copia ricorsivamente tutte le sottocartelle
  • / (barra) è la directory principale del tuo sito web
  • C:\yourFolderDirectoryHere\* seleziona tutto all'interno C:\yourFolderDirectoryHere

sembra carino, ma il server ha vietato il mio IP dicendo che ho effettuato 800 connessioni a breve intervallo. nessun modo per ridurre il numero di connessioni. UN ALTRO problema è che non so come saltare il caricamento se il file di destinazione esiste già.
16851556,

2

Offrirò una risposta che - sebbene sia pura forza bruta e per nulla elegante - è stata l'unica cosa che ha funzionato per me sulla riga di comando. Ho creato un elenco dei file e li ho inseriti in uno script:

genera il tuo elenco di file:

find my-dir -exec echo "put /Users/username/"{} {}  \;

copiarli e incollarli nello script:

#!/bin/bash

hostname="my-ftp-host"
username="username"
password="password"
ftp -in $hostname <<EOF
quote USER $username
quote PASS $password

binary
cd 123456
{COPY THE LIST HERE}
quit
EOF


0

FileZilla è ottimo per questo. Se non desideri scaricare / installare nulla, puoi farlo con Internet Explorer. Vai nelle opzioni avanzate e seleziona Enable FTP folder view (outside of Internet Explorer). Quindi puoi puntare una finestra di Explorer sul tuo server FTP e trascinare e rilasciare file e cartelle tra le finestre di Explorer.



0

La directory di destinazione è un file zip. È possibile copiare il file zip completo nel server ftp utilizzando il codice seguente.

//Taking source and target directory path
string sourceDir = FilePath + "Files\\" + dsCustomer.Tables[0].Rows[i][2].ToString() + "\\ConfigurationFile\\" + dsSystems.Tables[0].Rows[j][0].ToString() + "\\XmlFile";

string targetDir = FilePath + "Files\\Customers\\" + CustomerName + "\\" + SystemName + "\\";                                                                                       
foreach (var srcPath in Directory.GetFiles(sourceDir))
{
    //Taking file name which is going to copy from the sourcefile                                              
    string result = System.IO.Path.GetFileName(srcPath);

    //If that filename exists in the target path
    if (File.Exists(targetDir + result))
    {
        //Copy file with a different name(appending "Con_" infront of the original filename)
        System.IO.File.Copy(srcPath, targetDir + "Con_" + result);
    }
    //If not existing filename
    else
    {
        //Just copy. Replace bit is false here. So there is no overwiting.
        File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), false);
    }
}         

È carino, ma il tuo programma non si compila.
DavidPostill

0

La mia risposta è una variazione della risposta di @dgig.

Puoi elencare tutti i file e salvarli (incluso il comando put) in un file:

find my-dir -exec echo "put /Users/username/"{} {} > list.txt \; 

e quindi utilizzare sftp per elaborare il file:

sftp -C -b sftpbatchfile.txt name@server

-Cè per la compressione, -bè per il file batch


Questo non utilizza FTP come richiesto. Il sftpprogramma utilizza il protocollo SFTP, che è un protocollo diverso sebbene abbia alcune lettere in comune. E non hai modificato il enter code hererimanente.
dave_thompson_085
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.