Dosyaların sahibini yinelemeli olarak değiştirin, ancak dizinleri değiştirmeyin


14

~ 50k dizinleri ve ~ 1m dosyaları olan bir dizin var.

Tüm dosyaların sahibini (veya iznini) değiştirmek istiyorum, ancak dizinleri değiştirmek istemiyorum. Bunun nedeni, uzak bir sunucudan (~ 150k dizinleri ve ~ 3.6m dosyaları) ek dosyaları SCP yapmaya çalışıyorum.

Sahip olduğum dizin uzak dizinin bir parçası, ancak scp başarısız oldu ...

SCP'yi tekrar çalıştırırsam, uzak dizinden zaten kopyaladığım dosyaların üzerine yazarak baştan başlar.

Yanıtlar:


20

Kullanabilirsiniz find, bu ARG_MAXişlemde tetiklenmeyecek ek bir avantajı vardır . Üst dizinden:

find . -type f -exec chown newowner {} +

Şunun için chmod:

find . -type f -exec chmod 644 {} +

-type folacak finddosyaları sadece.


1
Gerçekten harika çalışıyor! Teşekkürler! Hem chmod hem de chown için +1
Marcus Brunsten

2
Peki findtetiklemiyor ARG_MAXmu? Her zaman sahip olacağını düşündüm. Her zaman bir şeyler öğrenirsiniz :)
kos

5

Başka bir alternatif kullanmaktır xargs. -print0Seçeneği findve aşağıdakilere karşılık gelen bir -0seçeneği kullanmanız gerekir xargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

Gönderen man find:

-print0

standart çıktıya tam dosya adını, ardından boş bir karakter yazdırın . Bu , yeni satırlar veya diğer beyaz boşluk türlerini içeren dosya adlarının , bulma çıktısını işleyen programlar tarafından doğru şekilde yorumlanmasına olanak tanır . Bu seçenek xargs'ın -0 seçeneğine karşılık gelir.

xargsayrıca doğru şekilde işleyecektir ARG_MAX.


2
find..execgarip dosya isimlerini işliyor mu?
heemayl

1
@heemayl Bazı testler yaptım ve haklısın. Ben düzeltilmiş duruyorum. İşaret ettiğiniz için teşekkür ederim, cevabımı güncelledim.
AP
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.