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_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ýmscp
" 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
- 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_dir
se všemi podadresáři:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
zkopírujte pouze obsah
local_dir
a 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_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
scp * [email protected]:/var/www/html/target_dir
to, co chcete? Pokud ano, upravte podrobněji, o co ' se snažíte & dosud vyzkoušeli.