[Çözüldü] Gizli Dosyaları .* Kalıbı ile Kopyalamak

Başlatan blacksnow, 25 Aralık 2014 - 20:51:20

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

blacksnow

Açıkcası soruyu nasıl soracağımı ve konuyu nereye açacağımı bilemedim.Şuan da Kim Korkar Linuxtan adlı kitabı okuyorum.Kitapta şöyle bir örnek var;
cp .* * /home/ayfer/sakla
Ben kendime uyarlayıp bu komutu yazdığımda şöyle bir hata alıyorum.

cp .* * ~/Masaüstü
cp: `*' durumlanamadı: Böyle bir dosya ya da dizin yok

Burada ikinci parametre " * " gerekli mi?Çünkü bu parametreyi silersem bu hatayı almıyorum.

Komutu böyle verdiğimde de "." ve ".." dizinleriyle ilgili sorun yaşıyorum.
cp .* ~

Gizli dosyalar ile "." ve ".." dizinleri de kopyalanıyor.Şimdi bu dizinlerle çakışmamak için örneğin kopyalanacak dizin .araba ise ben "cp .a* ~" şeklinde ya da dosya ismini tamamiyle yazmak mı zorunda mıyım? Soruyu toparlayayım bir dizindeki tüm gizli dizinleri ( .* parametresi ile ) aynı anda kopyaladığımda "." ve ".." dizinlerini kopyalanmasını nasıl engellerim?

heartsmagic

Sadece gizli dizinleri mi yoksa gizli dosyaları mı kopyalamak istiyorsun?  Eğer hepsi olsun diyorsan:
cp -R .[^.]* /kopyalanacak/dizin

Ancak, ben ayırmak istiyorum diyorsan sanırım find ile bir şeyler karıştırmak gerekecektir.

find . -maxdepth 1 -name '.*' ! -name . -prune -type d -exec cp -a '{}' /kopyalanacak/dizin \;
Bu dizinleri kopyalar, dosyalar içinse -type f iş görür. Buradaki mesele ! -name . -prune diyerek . dizinini hariç tuttuk, komutun başındaki -maxdepth 1 ile de işlemi sadece o dizin içinde sınırladık.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

blacksnow

#2
İlk verdiğiniz komut istediğim gibi çalışmakta.Fakat komutun içeriğini biraz daha açıklar mısınız?

Yani şimdi -R rekürsif için mi kullanılıyor? Eğer öyleyse -r neden kullanılmıyor aralarında ki fark nedir?

Birde burada ne yapıyoruzda "." ve ".." dizinlerini parametreye katılmıyor.
.[^.]*
Daha yeniyim biraz daha detaylı anlatsanız çok iyi olur.Teşekkür ederim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 26 Aralık 2014 - 20:33:38

cp komutunun manual-inden baktım ve  -r, -R, --recursive aynı şey olduğunu öğrendim.Artık tek merak ettiğim  .[^.]*  parametresi nasıl çalışıyor.

heartsmagic

O konu azıcık karışık, yeni olmasan bile zor gelebilir :) Bana da zor geliyor örneğin, işim düştüğünde bulup ne olduğunu az çok anlıyorsam yetiyor. Öteki türlü tam olarak ama tam olarak ne olduğunu anlamak için elleri kirletmek gerekiyor :) Orada kullanılan şey biraz düzenli ifadlere (regular expressions) benziyor fakat tam olarak regex değil. Kabuğun bu konuda kendi yaklaşımı var ki ona da "globbing" deniyor. Daha doğrusu "globbing" içindeki düzenli ifadeler, karatker genişlemeleri. Doğrudan şuraya bakılabilir:

man 7 glob

Daha ilerisi içinse (ki daha ilerisi de var):

man bash

içindeki "Pattern Matching" kısmı fayda verecektir. Cevap vermek kolay da işte, iş açıklamaya gelince senle beraber biz de elimizi kirletiyoruz :)

.[^.]* ifadesine gelirsek. Şimdi, sen diyorsun ki dosyaları kopyalayım ama sadece gizlilieri olsun. Başında nokta olacak yani. Fakat öyle olacak ki . ve .. bu işe dahil edilmesin, yani o an bulunan ve bir üst dizin alınmayacak. İşte, burada nokta ile başlayıp ardından bir nokta daha olan dizini es geçmek için ^. kullanılıyor. Kısacası orada alınan şey nokta ile başlayan dizinler, dosyalar olsun fakat ikinci noktayla devam etmesin (^ kullanarak), onun ötesini ise tümden al (* kullanarak) demek oluyor. Burada gıcık olan durum ise .'nın kendisinin yani sadece o ismin bu şekilde kendiliğinden es geçilmesiymiş. Bunu da deneyerek anlayabilirsin örneğin:

.[^a]*

dersen tüm gizli dosyaları seçer, ancak .a ile devam edenleri es geçer, haiyle .. olan dizini de dahil eder. Fakat görüyoruz ki cidden . yok piyasada, demek ki o kendiliğinden es geçiliyor.


Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

blacksnow

Aslında soruyu sorduktan sonra böyle olduğunu anlamıştım fakat benimde aklıma . takılmıştı. ".." ile ilgili bir sorun yok . dan sonra . geliyor ve es geçiliyor. "." dan sonra bir şey gelmiyor.Galiba "." dan sonra devam etmediği için es geçiliyor.Biraz üst düzeymiş anladığım kadarıyla, daha öğrenilecek çok şey var.

Eğer elinizde bunları anlatan türkçe bir kaynak varsa paylaşır mısınız? Çünkü manual-leri anlayacak kadar ne bilgim ne de İngilizcem var.Teşekkürler.

heartsmagic

Bildiğim Türkçe kaynak yok ne yazık ki, İngilizce bile kıt bulunuyor ayrıntı için.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

ironic

Alıntı yapılan: blacksnow - 27 Aralık 2014 - 13:05:02
Eğer elinizde bunları anlatan türkçe bir kaynak varsa paylaşır mısınız? Çünkü manual-leri anlayacak kadar ne bilgim ne de İngilizcem var.Teşekkürler.

http://pdf.belgeler.org/regex/regexinfo.pdf
http://seminer.linux.org.tr/wp-content/uploads/duzenli_ifadeler.pdf

blacksnow