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.