Uzak Sunucudaki Aynı Alt Dizine Dosya Yüklemek için Kabuk Betiği
Bir web geliştiricisi için çok yaygın bir görev, geliştirme kutunuzdaki bir alt dizinden tek bir dosyayı uzak bir sunucudaki aynı alt dizine yüklemek. Ne yazık ki, bu her zaman her iki sunucudaki dizinlerin değiştirilmesini içeren can sıkıcı bir el ile sonuçlanıyor ve çok fazla zaman harcıyor.
Bu yüzden, güvenli dosya kopyalama için scp kullanarak benim için bunu otomatikleştirmek için bir kabuk betiği yazmayı kendim üstlenmiştim. (Önemli Taraf Notu: ftp korkunç derecede güvensizdir, bunun yerine WinSCP kullanın)
Çözülmesi gereken asıl sorun, geliştirme makineme WordPress kurulumumun sunucumdaki kurulumdan farklı bir temel dizine sahip olmasıdır. Geliştirme makinemde / var / www ve sunucumda / var / www / howtogeek / docs / gibi bir şey var. Bunları betiğin başında değişkenlere taşımaya karar verdim, şöyle:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Koddaki yerel dizinin (LDIR) yoldaki her bir \ 'den önce \ olduğuna dikkat edin. Bunun nedeni daha sonra komut dosyasında sed komutuna geçeceğimizden, bu değerlerden kaçmamız gerekiyor. Bunun başka bir yolu olduğuna eminim, ama farkında değilim..
Ardından, otomatik ssh girişleri ayarlarım. Bunu yapmak için önce ssh keygen yardımcı programını aşağıdaki gibi çalıştırmanız gerekir:
ssh-keygen -t rsa
Daha sonra, uzak sunucudaki ~ / .ssh / id_rsa.pub dosyasını ~ / .ssh / yetkili_keys dosyasına kopyalamanız gerekir. ~ / .Ssh dizini uzak sunucuda zaten oluşturulmuşsa (kontrol etmek isteyebilir), tuşları kopyalamak için bu komutu çalıştırabilirsiniz:
cat ~ / .ssh / id_rsa.pub | ssh kullanıcısı @ hostname 'cat >> .ssh / approved_keys'
Şimdi scp yardımcı programını şifre olmadan kullanmayı sağlayacak otomatikleştirilmiş ssh girişleri var. Şimdi komut dosyasında kullanacağımız scp komutuna bir göz atalım:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed “s / $ LDIR //” '/' echo $ 1 | sed 's /.*\// "
$ 1, yüklemeye çalıştığınız dosya adı için komut dosyasına ileteceğiniz parametredir. $ SSHSERVER ve $ RDIR, user @ hostname ve önceki uzak yolu ayarlamak için betiğin başında ayarlayacağımız değişkenlerdir..
Pwd | sed ile başlayan ilk blok, geçerli dizin yolunu alır ve uzaktaki sunucuyla eşleşmeyen yolun önceki bölümünü kaldırır, ancak yolun kalanını bırakır. Örneğin, eğer / var / www / wp-content / komutunu çalıştırdığınızda, sed bloğu LDIR değişkenimize göre / var / www 'yi soyar, ancak / wp-content / kısmını bırakır.
İkinci blok, önceki tüm yolu komut dosyasına geçirilen dosya adından çıkarmayı ve böylece dosya adını almanızı sağlar..
Örneğin, komut dosyasını up.sh olarak adlandırdıysanız ve bir dosyadaki yerel / var / www / wp-content / plugins / dizininizden çalıştırdıysanız:
up.sh Instagram Hesabındaki Resim ve Videoları myplugin.php
Bu, kabuk tarafından aşağıdaki gibi genişletilecektir:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Makaleye dayanarak kendi script dosyanızı oluşturmaya çalışmak yerine, indirmenizi sağladım. Bu şekilde çalışmayan özel karakterlerle ilgili herhangi bir sorun olmayacak… ve evet, komut dosyasını kendi yüklemek için kullandım =)
İndir geek-uploader.sh
Sadece yolunda bir yere koy ve ne istersen isimlendir. Benim adımı sadece “yukarı” olarak değiştirdim, bu yüzden yüklemek için sadece “yukarı dosyaadı.txt” yazabilirim. Ayrıca açmayı ve betiğin başında değişkenleri ortamınıza uygun şekilde değiştirmeyi unutmayın..
Bu betiğin bir * nix kabuğu ve scp yardımcı programı ile herhangi bir şey üzerinde çalışması gerekir. Ubuntu kullanıyorum, ancak Cygwin yüklü olan Solaris, OS X veya Windows üzerinde çalışmalı..