tarafından

Linux’ta iki dizindeki farklı dosyaları bulma ve dizinleri senkronize etme


Linux’ta iki dizindeki farklı dosyaları bulma ve dizinleri senkronize etmek için aşağıdaki yöntemler kullanılabilir.

diff komudu ile iki dizin altındaki dosya ve alt dizin farkları alınabilir:
diff -r dizin1 dizin2

Dosya farkları önemli değilse -q eklenir:
diff -qr dizin1 dizin2

Dizindeki dosyalar çok büyük olursa bu işlem çok uzun sürebiliyor. Bu durumda iki dizindeki dosyaların listesi iki dosyaya kaydedilir, bu dosyaların farkı alınarak, farklı dosyalar bulur:

ls -1 /dizin1 > /tmp/dizin1dosyalari.txt
ls -1 /dizin2 > /tmp/dizin2dosyalari.txt
diff /tmp/dizin1dosyalari.txt /tmp/dizin2dosyalari.txt > /tmp/dizinfarklari.txt

dizinfarklari.txt dosyasında, “<” ile gösterilenler dizin2 dizinindekileri gösterir. Buna göre bu dosyadan dizin1’e atılacaklar için, “>” ile başlayan satırlar alınırarak bu dosya isimlerinin her birinin bir satırda olacağı bir dosya oluşturulur. Bu dosya isim dizin2dendizin1eatilacakdosyalar.txt olsun. dizin2 isimli dizine geçilerek bu dosyalar dizin1 dizinine aşağıdaki gibi kopyalanır:

cd /dizin2
xargs -a /tmp/dizin2dendizin1eatilacakdosyalar.txt cp -t /dizin1

Eğer dosyalar taşınacaksa cp yerine mv komudu kullanılır:
xargs -a /tmp/dizin2dendizin1eatilacakdosyalar.txt mv -t /dizin1