Ben size yalvarıyorum, cpkomut satırında düz kabuk genişlemesinden uzaklaşın - kabuk genişlemesi her türlü ahem "ilginç" köşe vakalarına sahiptir. findBunun yerine kullanın.) Bunun yerine kullanın ( findutilspaketin yüklü olmaması durumunda pakette gelir - bu garip olurdu, tüm dağıtımlar varsayılan olarak yükler):
find -H /path/to/toplevel/dir/ -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' /path/to/destination/dir/ \;
Adım adım açıklama:
-Hfindsembolik bağlantıları takip etmemeye neden olur (verdiğiniz gerçek üst düzey dizin adı bir sembolik bağlantı olduğu sürece takip eder.)
/path/to/toplevel/dir/ Açıkçası, yedeklemek istediğiniz ayar dosyalarını ve dizinleri barındıran dizin yapmak yolu ile değiştirilmesi gerekiyor.
-maxdepth 1findadı bir nokta ile başlayan tüm dizinlere yinelemeli olarak inmeyi durdurur . Dinlemek için ihtiyacımız yok cp, bunu bizim için yapacağız, sadece bu seviyede isimlere ihtiyacımız var.
-name '.*'findnokta ile başlayan tüm isimleri istediğimizi söyler . Ortam değişkeni POSIXLY_CORRECTayarlanmışsa bu düzgün çalışmaz , ancak nadiren (eğer varsa) ayarlanır. Bu, şimdiye kadar belirlediğimiz ilk eşleşme koşulu.
a \( ....... \)bir ve parantez içinde daha karmaşık bir duruma ardından (Kullandığım ..... onun yerine, o en aşağıda açıklanmıştır.) aksi takdirde kabuk tarafından yorumlanır (yanlış) olacağım beri parantez kaçmak gerekir, dolayısıyla önlerindeki ters eğik çizgi,
-type d -o -type f -o -type lbunlar arasında veya arasında üç koşul vardır . -type ddizinlerle -type feşleşir, normal dosyalarla -type leşleşir ve sembollerle eşleşir. Ne istediğinizi seçebilirsiniz - örneğin, ayar dizinlerini yedeklemek istemiyorsanız, atlayın -type d(ve -ohemen arkasında).
-exec ..... \;findher eşleşmeyle karşılaşıldığında bir komut çalıştırmayı söyler . Komutun sonu, kabuk yorumundan kaçınmak için tekrar ters eğik çizgiyle kaçmamız gereken bir noktalı virgülle işaretlenir. Bu komut satırında, {}karşılaşılan eşleşmenin adının bitmesini istediğiniz yeri kullanmanız gerekir . Kabuklar da kıvırcık parantezleri yanlış yorumlayabileceğinden, onları olduğu gibi kesme işaretlerine yerleştirmelisiniz '{}'. Bu durumda yürütmek istediğimiz komut şöyledir cp -a '{}' /path/to/destination/dir/(-a, alt dizinlerde toplanan arşivleri, bağlantıları bağlantı olarak kopyalayan ve izinleri ve genişletilmiş öznitelikleri koruyan ve /path/to/destination/dir/açık olarak hedef dizinin adı olan arşiv anlamına gelir - değiştirin).
Yani, basit İngilizce'de, bu findkomut satırı şunu söylüyor:
/ Path / konumundan / toplevel / dir / konumunda başlayın. Herhangi bir alt dizine inmeyin. Adı bir nokta ile başlayan tüm dizinleri, dosyaları ve sembolik bağlantıları bulun. Bulduklarınızın her biri için, onu / path / to / destination / dir / doğayı, izinleri ve genişletilmiş öznitelikleri kopyalayın.
-rve-R?