Hogyan lehet az összes fájlt átmásolni egy könyvtárból egy távoli könyvtárba az scp segítségével?

A célom csak másolás az összes fájl ~ / local_dir [email protected] / var / www / html / target_dir a scp használatával, és ne hozzon létre local_dir kategóriát a local_dir könyvtárban.

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

de nem

/var/www/html/target_dir/local_dir/files.. az -r paraméter használatakor

Megjegyzések

Válasz

scp -r argumentummal rendelkezik. Tehát próbálkozzon a következővel:

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

Az -r argumentum ugyanúgy működik, mint az -r arg a cp-ben, a teljes mappát, az összes fájlt és alkönyvtárat átviszi belül.

Megjegyzések

  • A parancsod létrehozta a local_dir könyvtárat a / var / www / html / target_dir könyvtárban a célom csak a fájlok másolása.
  • Sajnálom, tévedtem. Ezután egyszerűen ismételje meg a parancsot, de így: $ scp -r ~/local_dir [email protected]:/var/www/html/ Ezután nevezze át az új könyvtárat, ha szükséges.
  • Vagy $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Bármi lebegteti a hajóját.
  • Változtassa a helyettesítő karaktert * ponttá . és ' Másolja a könyvtár tartalmát (beleértve a dot fájlokat is), anélkül, hogy másolná magát a könyvtárat. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Sajnos a . használatát egy rosszul megvalósított scp " hibajavítás " (lásd: < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). A rsync működő alternatíva lenne.

Válasz

Ha a célod az összes fájl átvitele a local_dir fájlból, a * helyettesítő betűvel:

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

A -r opció jelentése „rekurzív”, ezért akkor kell megírnia, amikor egy egész könyvtárat vagy több könyvtárat próbál átvinni.

From man scp:

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

Tehát ha vannak alkönyvtárai a , az utolsó példa csak fájlokat továbbít, de ha beállítja a -r beállítást, akkor fájlokat és könyvtárakat fog átvinni.

Megjegyzések

  • 1+ Mivel a helyes válasz eléréséhez el kell olvasnia az elfogadott válasz megjegyzéseit, míg ez csak közvetlenül elmagyarázza.

Válasz

/. hozzáfűzése a forráskönyvtár átviszi a tartalmát a könyvtár helyett. A helyettesítő karakteres megoldással ellentétben ez magában foglal majd minden rejtett fájlt is.

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

A megoldás elismerése a roaima-ra kerül, de úgy gondoltam, hogy ezt tényleges válasz, nem csak megjegyzés.

Megjegyzések

Válasz

Kövesse ezeket a lépéseket:

  1. Könyvtár másolása local_dir összes alkönyvtárával:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. csak a local_dir, nem pedig maga a local_dir könyvtár:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Ne használja: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir as hibát dob (csak tesztelték és megkapta a következő hibát):

    scp: error: unexpected filename: . 

megjegyzések

  • A váratlan fájlnév hibáját is kapom. A helyettesítő karakter használata azonban sem működik, mert a könyvtárban annyi fájl van, amely meghaladja a karakterek korlátját a parancsok kibontásakor. macOS
  • @RichardKiefer: Használhat helyettesítő karaktereket, például? a * gombbal további elkülöníteni a keresési eredményeket, majd továbbítani az scp-nek. Próbálja ki ezt a linket, és segíthet: Helyettesítő karakterek
  • Köszönöm Syed, de az volt a lényegem, hogy valójában a mappában lévő összes elemet meg akarom célozni , és nem szűrhet semmit. És ha a könyvtáram túl sok, akkor a helyettesítő karakter csak nem fog működni.
  • @RichardKiefer: Elnézést kérek Richardtól, az összes fájl másolásához használhatunk egy kis bash szkriptet. Használja: ls -l | awk '{print $9}' és irányítsa át az összes kimenetet (amely minden fájlnév lenne) egy txt fájlba. Olvassa el a txt fájlt egyenként, és használja ezt az inputot az scp-vel a fájlok másolásához: input=/home/user/filename.txt while IFS= read -r line

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük