FTP kullanarak tüm bir klasörü yükleyebilir miyim?


29

FTP kullanarak tam bir klasör yüklemem gerekiyor. Bir klasörü ve tüm içeriğini bir kerede aktarmak için herhangi bir seçenek var mı?

Yanıtlar:


24

Standart bir komut satırı ftp istemcisi kullanıyorsanız, MPUTkomut bir (kabuk glob stili) desenle eşleşen tüm dosyaları aktarmanıza izin verir, böylece MPUT *tüm dosyaları geçerli dizine gönderir. MGETBir modelle eşleşen dosyaları almak için de vardır .

Varsayılan olarak, her ikisi de MPUTve MGETbunu yapmadan önce her dosyanın aktarılıp aktarılmayacağını soracaktır. Muhtemelen "PROMPT" komutuyla bilgi istemini kapatmak isteyebilirsiniz (tartışma yok; bu bir seçimdir).


Bu soru aslında stackoverflow'tan geldi, bu yüzden kabul edilen cevap olması gerektiğini düşünüyorum. Asıl asker ortadan kaybolmuş gibi gözükse de, birini kabul etmeyecekti ....
codetaku

Uyarı: Windows ile birlikte gelen FTP komut satırı istemcisi pasif modu desteklemediğinden, bu tekniği kullanmak zaman kaybetmenize neden olabilir. Benim durumumda dosya yüklemem gerektiğinden ve Windows komut satırını yerel olarak kurulu bir alet kullanmamdan beri yaptı.
sean2078

1
Geçerli dizindeki tüm düz dosyaları aktaracaktır, ancak yinelemeli olarak mevcut olan dizinleri aktarmayacaktır. Sadece sessizce onları göz ardı eder
bergercookie

22

Ncftpput kullanabilirsiniz. Aşağıdakileri yapın:

  1. Ncftp'yi kurun:

    yum install ncftp
    

yum küçük harflidir.

Alternatif:

    apt-get install ncftp

2. Aşağıdaki komutu yürütün:

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

Yum, yum olarak değiştirilmelidir - büyük / küçük harfe duyarlıdır.
olekeh

1
Ncftpput için tüm CLI seçenekleri: ncftp.com/ncftp/doc/ncftpput.html
Pepijn Olivier



2

Burada benim gibi diğer Windows yenileri için basit bir eğitim:

Tüm bir klasörü yüklemenin en kolay yolu (tüm alt klasörlerde ve dosyalarda):

  1. Bu bağlantıdan NcFTP İstemcisi'ni indirin (ücretsizdir, ancak bağışta bulunabilirsiniz) .
  2. Listeden Microsoft Windows için NcFTP İstemcisi 3.2.5'i seçin .
  3. Yükle.
  4. Tamamlandığında, kiraz ikonuna sahip küçük bir CMD penceresi açılacaktır. İhtiyacın yok.
  5. Sadece standart bir CMD penceresi açın ve şunu yazın:
    ncftpput -u * kullanıcı AdınızHere * -p * kullanıcıKullanıcıŞifreHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (bir satır olarak).

Bunu not et:

  • -R "özyinelemeli" için bir bayraktır; komutu tüm alt klasörleri yinelemeli olarak kopyalar
  • / (eğik çizgi) web sitenizin kök dizinidir
  • C:\yourFolderDirectoryHere\* içindeki her şeyi seçer C:\yourFolderDirectoryHere

güzel görünüyor, ancak sunucu kısa sürede 800 bağlantı yaptığımı söyleyerek IP adresimi yasakladı. bağlantı sayısını azaltmanın bir yolu yok. Başka bir sorun ise hedef dosya zaten mevcutsa yüklemeyi nasıl atlayacağımı bilmiyorum.
16851556

2

Komut satırında benim için çalışan tek şey - saf kaba kuvvet olsa ve en ufak olarak zarif olmasa da - bir cevap sunacağım. Dosyaların bir listesini oluşturdum ve onları bir komut dosyasına koydum:

dosya listenizi oluşturun:

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

bunları kopyalayıp komut dosyasına yapıştırın:

#!/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 bunun için harika. Bir şey indirmek / yüklemek istemiyorsanız, Internet Explorer ile yapılabilir. Gelişmiş seçeneklere gidin ve öğesini seçin Enable FTP folder view (outside of Internet Explorer). Ardından, FTP sunucunuzda bir gezgin penceresini işaret edebilir ve gezgin pencereleri arasında dosya ve klasörleri sürükleyip bırakabilirsiniz.


0

Firefox’un FireFtp adında ve ftp istemcisi olarak adlandırılan bir eklentisi vardır .


0

Hedef dir bir zip dosyasıdır. Aşağıdaki kodu kullanarak tam zip dosyasını ftp sunucusuna kopyalayabilirsiniz.

//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);
    }
}         

Güzel, ama programın derlenmiyor.
DavidPostill

0

Benim cevabım @dgig'in cevabının bir çeşididir.

Tüm dosyaları listeleyebilir ve (put komutu dahil) bir dosyaya kaydedebilirsiniz:

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

ve sonra dosyayı işlemek için sftp kullanın:

sftp -C -b sftpbatchfile.txt name@server

-Csıkıştırma içindir, -btoplu iş dosyası içindir


Bu istendiği gibi FTP kullanmaz. sftpProgram ortak olan bazı harfler olmasına rağmen farklı bir protokoldür SFTP protokolünü kullanır. Ve enter code hereartıkları düzenlemediniz .
dave_thompson_085
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.