Shell parancsfájl egy Fájl feltöltéséhez ugyanazon alkönyvtárba egy távoli kiszolgálón
A webfejlesztő nagyon gyakori feladata egyetlen fájl feltöltése a fejlesztési doboz alkönyvtárából egy távoli kiszolgáló ugyanabba az alkönyvtárába. Sajnos ez mindig olyan bosszantó kézi folyamat, amely magában foglalja a könyvtárak mindkét szerveren történő átkapcsolását, és sok időt veszít.
Szóval, én magam is felvettem egy shell script-et, hogy ezt automatizálja nekem, a scp segítségével a biztonságos fájlmásoláshoz. (Fontos oldal Megjegyzés: Az ftp borzalmasan bizonytalan, a WinSCP használata helyett)
A fő problémát az jelentette, hogy a fejlesztőgépemben található WordPress telepítésemnek egy másik alapkönyvtára van, mint a kiszolgálón található telepítés. Fejlesztő gépemben ez a / var / www, és a szerveren sokkal inkább a / var / www / howtogeek / docs /. Úgy döntöttem, hogy ezeket a változókat a parancsfájl elején helyezem át, így:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Ne feledje, hogy a helyi könyvtár (LDIR) a parancsfájlban minden \ t Ez azért van, mert ezt a parancsot később egy sed parancsba továbbítjuk, így el kell menekülnünk az értékekből. Biztos vagyok benne, hogy van valami más út erre, de nem tudom róla.
Ezután beállítottam az automatikus ssh bejelentkezéseket. Ehhez először futtatnia kell az ssh keygen segédprogramot:
ssh-keygen -t rsa
Ezután át kell másolnia a ~ / .ssh / id_rsa.pub fájlt a távoli kiszolgáló ~ / .ssh / author_keys fájljába. Ha a ~ / .ssh könyvtárat már létrehozta a távoli kiszolgálón (lehet, hogy ellenőrizni szeretné), akkor futtathatja ezt a parancsot a kulcsok másolásához:
cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / author__ysys'
Most már van automatizált ssh bejelentkezésünk, amely lehetővé teszi a scp segédprogram használatát jelszó nélkül. Most nézzük meg a scp parancsot, amelyet a scriptben fogunk használni:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed '/ / / /
A $ 1 az a paraméter, amelyet a feltölteni kívánt fájlnév parancsfájljára továbbít. A $ SSHSERVER és a $ RDIR olyan változók, amelyeket a szkript elején állítunk be a felhasználó @ állomásnevének és az előző távoli elérési útnak a beállításához.
Az első blokk, amely a pwd | sed-el kezdődik, az aktuális könyvtárútvonalat veszi, és eltávolítja az elérési út előző részét, amely nem felel meg a távoli kiszolgálónak, de elhagyja az út többi részét. Például, ha a / var / www / wp-content könyvtárban voltál / amikor a parancsot futtatta, a sed blokk az LDIR változónk alapján leválasztja a / var / www fájlt, de hagyja a / wp-tartalmat / annak egy részét.
A második blokk mindenképpen biztosítja, hogy az egész előző útvonalat leállítsa a parancsfájlba átadott fájlnévről, így csak a fájlnevet kapja.
Például, ha a up.sh parancsfájlt elnevezte, és a helyi / var / www / wp-content / plugins / könyvtárból futtatta a fájlt:
up.sh myplugin.php
Ezt a shell a következőképpen bővítette volna:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Ahelyett, hogy saját cikkfájlt hozna létre a cikk alapján, letöltöttem. Így nem lesz probléma a különleges karakterekkel, amelyek nem működnek… és igen, én használtam a szkriptet a feltöltéshez =)
Letöltés geek-uploader.sh
Csak tedd valahol az utadba, és nevezd el, amit akarsz. Átneveztem az enyémet csak „fel” -nek, így a feltöltéshez csak „up filename.txt” -et írhatok. Ne feledje, hogy megnyitja azt, és módosítsa a változókat a szkript elején, hogy megfeleljen a környezetnek.
Ennek a szkriptnek a * nix héjjal és a scp segédprogrammal kell dolgoznia. Az Ubuntu-t használom, de a Solaris, az OS X vagy a Windows rendszeren kell működnie a Cygwin telepítésével.