Jak kopírovat všechny soubory z adresáře do vzdáleného adresáře pomocí scp?

Mým cílem je pouze zkopírovat všechny soubory z ~ / local_dir na [email protected] / var / www / html / target_dir pomocí scp a nevytvářejte kategorii local_dir v adresáři local_dir.

/var/www/html/target_dir/files.. 

ale ne

/var/www/html/target_dir/local_dir/files.. při použití parametru -r

Komentáře

  • Nedělá scp * [email protected]:/var/www/html/target_dir to, co chcete? Pokud ano, upravte podrobněji, o co ' se snažíte & dosud vyzkoušeli.
  • Připojování /. již není práce. Více zde

Odpověď

scp má argument -r. Zkuste tedy použít:

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

Argument -r funguje stejně jako -r arg v cp, přenese celou vaši složku a všechny soubory a podadresáře uvnitř.

Komentáře

  • Váš příkaz vytvořil adresář local_dir v adresáři / var / www / html / target_dir mým cílem je kopírovat pouze soubory.
  • Lituji, pomýlil jsem se. Pak stačí příkaz zopakovat, ale takto: $ scp -r ~/local_dir [email protected]:/var/www/html/ V případě potřeby pak přejmenujte nový adresář.
  • Nebo $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Cokoliv plave na vaší lodi.
  • Změňte zástupný znak * na tečku . a vy ' Zkopíruji obsah adresáře (včetně všech souborů s tečkami), aniž byste zkopírovali samotný adresář. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Bohužel použití . bylo porušeno špatně implementovaným scp " oprava chyby " (viz < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync by fungující alternativou.

Odpověď

Pokud vaším cílem je přenést všechny soubory z local_dir zástupného znaku *:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

Možnost -r znamená „rekurzivně“, takže ji musíte napsat, když se pokoušíte přenést celý adresář nebo několik adresářů.

From man scp:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

Takže pokud máte podadresáře uvnitř local_dir, poslední příklad přenese pouze soubory, ale pokud nastavíte možnost -r, přenese se soubory a adresáře.

Komentáře

  • 1+ Protože ke správné odpovědi potřebujete přečíst komentáře v přijaté odpovědi, zatímco tato ji vysvětluje přímo.

Odpověď

Přidání /. do zdrojový adresář přenese jeho obsah namísto samotného adresáře. Na rozdíl od zástupného řešení to bude zahrnovat i všechny skryté soubory.

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

Zásluhu na tomto řešení má roaima, ale myslel jsem, že by mělo být zveřejněno jako skutečná odpověď, nejen komentář.

Komentáře

Odpověď

Postupujte takto:

  1. Zkopírujte adresář local_dir se všemi podadresáři:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. zkopírujte pouze obsah local_dir a nikoli samotný adresář local_dir:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Nepoužívat: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir jako vyvolá chybu (právě otestováno a obdrženo následující chyba):

    scp: error: unexpected filename: . 

Komentáře

  • Zobrazuje se také chyba neočekávaného názvu souboru. Použití zástupného znaku však nefunguje, protože adresář obsahuje tolik souborů, které přesahují limit znaků pro příkazy, když se zástupný znak rozbalí. macOS
  • @RichardKiefer: Můžete použít zástupné znaky jako? pomocí * dále izolujete výsledky hledání a poté je předáte scp. Vyzkoušejte tento odkaz, může to pomoci: Zástupné znaky
  • Díky Syed, ale chtěl jsem zaměřit všechny prvky ve složce a žádné filtrovat. A pokud má můj adresář příliš mnoho, zástupný znak prostě nebude fungovat.
  • @RichardKiefer: Omlouvám se, Richarde, abychom mohli zkopírovat všechny soubory, můžeme použít malý bash skript. Použijte: ls -l | awk '{print $9}' a přesměrujte veškerý výstup (což by byly všechny názvy souborů) na soubor txt. Přečtěte si soubor txt, jeden řádek po druhém a použijte tento vstup se scp ke zkopírování souborů: input=/home/user/filename.txt while IFS= read -r line

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *