[Çözüldü] Bash ile Sürüm Kontrolü Nasıl Yapılabilir.

Başlatan mhmtkrktr, 28 Haziran 2016 - 21:18:07

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

mhmtkrktr

Hazırlayıp uzun zamandır kullandığım bir betik var. Bu betik, bu amaçla kullandığım USB flash bellek bilgisayara takılı ise otomatik olarak yerel depoyu USB olarak tanımlıyor. Bu sayede kurulum ve güncelleme için tekrar tekrar aynı dosyaları indirme zahmeti ortadan kalkıyor. Hem kota, hem zaman dostu. Aynı zamanda sorun çıkaran bir paket olursa, bir alt sürümü her zaman elde yedek kalmış oluyor.

Sorunum, sistem güncellendikçe Usb nin içinde ki dosyaların sürekli birikmesi ve ek alan ihtiyacı oluşturması.
Yapmak istediğim, aynı dizin içinde bulunan aynı isimdeki iki dosyanın eski sürüm olanını bulup, geçici olarak ayrı bir bölüme taşımak. Bunun için;
Güncelleme başlamadan önce ls komutuyla var olan paket listesini alıyorum.
Güncelleme tamamlanınca yine bir liste alıyorum.
diff ile karşılaştırma yapınca yeni ilave olmuş dosyaları bulabiliyorum ama benim ihtiyacım yeni yüklenen dosyaların varsa dizin içinde ki eski sürümlerini bulmak. Örnek;

sdiff dosya1 dosya2

gimp-2.8.0.1.tarxz                         gimp-2.8.0.1.tarxz
nautilus-3.2.0.2.tar.xz                    nautilus-3.2.0.2.tar.xz 
firefox-1.2.3.0.tar.xz                      firefox-1.2.3.0.tar.xz
linux-2.3.4.0.tar.xz                        linux-2.3.4.0.tar.xz
                                          > firefox-1.2.3.3.tar.xz
                                          > linux-2.3.4.4.tar.xz
 

Bu listeye göre firefox-1.2.3.0.tar.xz ve linux-2.3.4.0.tar.xz paketlerinin artık depoda durmasına gerek kalmamış. Belirli bir süre farklı bir alana alınıp daha sonra silinebilirler. (Şimdilik elle yapıyorum bunu :) )
Pacman 'inde bu konuda çözüm olacak bir komutu bulunmuyor gibi. Döngüsel olarak paket isimlerini karşılaştırmayı düşündüm fakat normalde bu listede 1000 'in üzerinde paket oluşuyor. Pratik yoldan, bu dizinin içinde bulunan paketlerin eski sürümlerini nasıl tesbit edebilirim?

illedelinux

GNU/Linux kullanmıyorum, onu yaşıyorum...

7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

mhmtkrktr

#3
Cevaplar için teşekkürler

Catfish ' e basitçe bir baktım ama sanki aradığım şey o değil gibi. En azından harici bir program değil istediğim. Yinede bir kenarda dursun, daha geniş bakayım sonra.

@8100d1r0n, bağlantıda dosyalar zaman bazında kontrol edilmiş. Bende hangi paketin ne zaman yeni sürüme geçeceği veya benim ne zaman güncelleme yapacağımın belirli bir zamanı yok. Bununla ancak son güncellemeden önce depoda bulunan tüm paketlerin listesini ayırabilirim ama zaten bu listeyi bana güncellemeyi başlatmazdan önce altığım liste söylüyor.
Ben mi yanlış değerlendirdim komutu acaba.

Buraya yazınca aklıma geldi şimdi. :)

Listede çok fazla paket var ama sadece yeni yüklenenlerin listesini ayırıp, digit 'e kadar olan bölümlerini karşılaştırırsam ve aynı sonuçtan birden fazla değer bulursam ve yine kontrol edilen ismi tutup uyuşan diğer isimdeki paketleri listelersem sonuç beklentiyi karşılayacaktır. Bu listeye göre de eski paketleri başka bir alana almak zaten kolay. 

Yinede daha farklı önerisi olan veya daha kolay ayırma yöntemi varsa bilmek isterim.






Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 28 Haziran 2016 - 22:39:37



Hadi canım yaa. Altı aydır ameleye bağlamışım işi şu aklıma gelmedi. :)

depo dizininin adını değiştir
geçerli bir dizin oluştur
güncellemeyi yap
iki dizin arasında isim karşılaştırması yap
aynı isimde olmayanları yeni oluşan dizine taşı
bir sonraki çalıştırmada da, adı değişen dizini sil

Bunu döngüsel olarak yapacağı için, adı değişen dizinde yedek olarak kalacaktır. Komut olarak yazmaya gerek varmıydı bilmiyorum ama üç mv bir rm ve bir diff le halloldu.