Mým cílem je pouze zkopírovat všechny soubory z ~ / local_dir na už[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
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_dirv 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_dirCokoliv 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ýmscp" oprava chyby " (viz < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).rsyncby 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
- Bohužel toto řešení bylo porušeno špatně implementovaným
scp" oprava chyby " (viz < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Odpověď
Postupujte takto:
-
Zkopírujte adresář
local_dirse všemi podadresáři:scp -r ~/local_dir [email protected] /var/www/html/target_dir -
zkopírujte pouze obsah
local_dira nikoli samotný adresářlocal_dir:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir -
Nepoužívat:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dirjako 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
scp * [email protected]:/var/www/html/target_dirto, co chcete? Pokud ano, upravte podrobněji, o co ' se snažíte & dosud vyzkoušeli.