Dosya izinlerini kopyalayın, ancak Unix'teki dosyaları kopyalamayın


14

(Gönderen: /programming/15245144/copy-file-permissions-but-not-files , konu dışı olduğu için kapatıldı)

Aynı dizin ağacının iki kopyası var. Neredeyse her ikisinde de aynı dosyalara sahipler (bir sürümde birkaç ekstra veya eksik dosya olabilir). Ancak, dosyaların çoğu her iki dizin için de ortaktır (aynı göreli yollara ve her şeye sahiptir).

Bunların dizinlerde olduğunu varsayın:

version1/
version2/

Sorun sürüm1 / izinleri berbat var ve ben sürüm2 / izinlerini kopyalamak istiyorum, ama bunu sürüm1 / daha yeni olan dosyaları değiştirmeden yapmak istiyorum.

Kabuk komutları veya komut dosyaları aracılığıyla bunu yapmanın otomatik bir yolu var mı?


Yanıtlar:



14

Benim versiyonu cpyok --attributes-onlyben bu kadar çalışmış, bu yüzden bayrağı. Basit klasörlerde kısaca test edildi, YMMV.

$> ls
version1/
version2/
$> ls -l version1/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a
$> ls -l version2/1/a
-rwxrwxrwx 1 alex alex 0 Feb  5 12:49 version1/1/a

$> find version1 -type f -printf '%P\n' | xargs -I {} \
    chmod --reference=version1/{} version2/{}

$> ls -l version2/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a

5

Yapabilirsiniz, ama "otomatik bir şekilde" sanmıyorum!

GNU chown ve GNU chmod'un --reference=RFILEkullanabileceğiniz bir parametresi vardır.

chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile

RFILEAyarları (izinler, sahip, grup vb.) Kullanır ve kopyalar yourfile.

kılavuz daha ayrıntılı olarak açıklanmaktadır.


0

Benim durumumda "stat" komutunu kullanarak "find" ve "vi" komutlarını kullanarak izinleri uygulayan bir komut dosyası oluşturdum.

cd version1/
find . -exec stat -c '%a %n' "{}" \; > setPerm.sh
vi setPerm.sh

"Vi" içine Tüm satırlara "chmod" komutunu ekledim: %s/^/chmod /g Betiği version2/dizine kopyalayıp yürüttüm .

Diğer çözümler geçerli görünüyor, ancak bunları test etmiyorum.


0

Mariano Paniga'nın cevabından esinlenerek, vi ve arama / değiştirme komutları gerekmeyen daha iyi bir cevabım olduğunu düşünüyorum. Hatta sahiplik bilgilerini de kopyalamak istiyorum (uid / gid).

cd version1/
find . -exec stat -c 'chmod %a %n; chown %U:%G %n' "{}" \; > /tmp/setPerm.sh
chmod u+x /tmp/setPerm.sh
cd ../version2
/tmp/setPerm.sh

İçindeki komutları stat -c '...'istediğiniz herhangi bir şeye göre özelleştirebilirsiniz . Tüm mevcut seçenekler için, bkz man stat.


Komut dosyanız gömülü yeni satırlara sahip adları işliyor mu?
Deer Hunter

@ deer-hunter Olduğu gibi çalışmalıdır, eğer değilse, dosya adı kısmının etrafına bir ".." alıntı ekleyebilirsiniz.
Tomofumi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.