Belirtilen izinlere sahip dosya ve klasörleri ayıklayın


11

7zip ile Windows'da çok sayıda alt klasör ve dosya içeren bir klasör paketliyorum, VPS'ye yükleyip komutu çalıştırıyorum:

tar -xvzf file.tar.gz

paketlenmemiş tüm dosya ve klasörlerin 777 izni vardır. Klasörlerin 755 ve 644 dosya izinlerine sahip olmasını nasıl sağlarım?


"Komut Satırı Fu" adında bir çok web sitesi daha vardır.
— djangofan

Yanıtlar:


13

tar(1)Normal bir kullanıcı olarak çalışıyorsanız , umaskvarsayılan olarak uygulamanızı uygular . tar(1)Olarak çalıştırıyorsanız root, --no-same-permissionskomutuna tar(1)saygı göstermesini istemek için komut satırı seçeneği verebilirsiniz umask.

Yani: ya normal kullanıcı olarak çalıştırın:

umask 022
tar zxvf file.tar.gz

veya şu şekilde çalıştırın root:

umask 022
tar zxvf file.tar.gz --no-same-permissions

Sen sopa isteyebilirsiniz umask 022senin içine ~/.bashrc, ~/.bash_profileya da ~/.profile. ( bash(1)Başlatma dosyalarıyla ilgili tüm ayrıntılar için kılavuz sayfasına bakın . Karmaşık.)

İle ilgili ayrıntılar umaskkabuğunuzun kılavuzunda, umask(2)sistem çağrısı kılavuzunda veya umask(1posix)POSIX tarafından sağlanan yardımcı program kılavuzunda ( manpages-posixyüklüyse) bulunabilir.


umask 022 tar zxvf file.tar.gz -> ayıklamak istersem her dosya için ayrı ayrı onaylamamı istiyor

Bunu yaparken mevcut dosyaların üzerine yazıyor musunuz?
— Ocak'ta sarnold

6

Dizin ve dosyalarınız için istenen izinleri ayarlamak üzere dizinin kökünde aşağıdaki komutları çalıştırın:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Kapama kıvrımı desteği ile arka eğik çizgi arasındaki boşluğa dikkat edin


find:

Bu komutun bana neden "find:` -exec '' argümanını eksik bulduğu "hakkında bir fikrin var mı? Teşekkürler.

Kapanış kıvrık ayraç ve\;
— poussma

2

chmodİçinde büyük X harfi kullanırsanız, yürütme izinlerini yalnızca dizinlerde ayarlamak için kullanabilirsiniz. yani

chmod -R ugo+X .

1

Benim için işe yarayan bu çözümü buldum. Klasörler ve alt klasörler için:

chmod -R 777 */

Ve tüm dosyalar için (klasörler ve alt klasörlerde de):

find . -type f -name "*" | xargs chmod 644

Tüm yorumlar, bunu yapmanın iyi bir yolu değilse hoş geldiniz. Linux öğrenmeye yeni başladım.

Yorumların ardından, özel karakterleri iyi işleyen daha sağlam bir çözüm şöyle olacaktır:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories

Fakat ikinci komut bana şu çıktıyı birçok dosyada veriyor: chmod: the': No such file or directory chmod: cannot access Logo.txt'ye erişemiyor ': Böyle bir dosya veya dizin yok chmod: `./blog/wp-content/themes/OneRoom/LOGO' dosyasına erişemiyor: Böyle bir dosya veya di rectory

2
777tehlikelidir ve yalnızca çok küçük bir sistem azınlığı için geçerlidir.
— Ocak'ta sarnold

2
İkinci emrinizi geliştirmek için find . -type f -print0 | xargs -0 chmod 644. -name "*"Gerekli değildir ve xargs(1)üzerinde dosya adlarını ayrıştırmak olacak boşluklar veya satırbaşıyla kullandığınız sürece -0- ASCII üzerinde dosya ayrıştırır NULDosya adlarında görünemez karakteri. -print0İçin find(1)uygun olan bir modda çıktısı biçimlendirmek sorar xargs -0giriş.
— Ocak'ta sarnold

0

bulmak. -tip f -exec chmod 644 {} \;


2
Superuser'a hoş geldiniz, lütfen 1 satırın cevapları nadiren kabul edilir, cevabınızı daha ayrıntılı olarak açıklayabilir misiniz?
— 50-3
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.