Ubah pemilik file secara rekursif, tetapi bukan direktori

14

Saya memiliki direktori yang memiliki ~ direktori 50k dan file ~ 1m.

Saya ingin mengubah pemilik (atau izin) dari semua file, tetapi tidak pada direktori. Ini karena saya mencoba untuk SCP file tambahan dari server jauh, (~ 150k direktori dan ~ 3,6 juta file).

Direktori yang saya miliki adalah bagian dari direktori jarak jauh, tetapi scp gagal ...

Jika saya menjalankan SCP lagi, itu akan memulai kembali dengan menimpa file yang sudah saya salin dari direktori jarak jauh.

Marcus Brunsten
sumber

Jawaban:

20

Anda dapat menggunakan find, ini memiliki keuntungan tambahan bahwa ARG_MAXtidak akan dipicu dalam proses. Dari direktori induk:

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

Untuk chmod:

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

-type ffindhanya akan file.

heemayl
sumber
1
Bekerja sangat bagus! Terima kasih! +1 untuk chmod dan chown
Marcus Brunsten
2
Jadi findtidak memicu ARG_MAX? Saya selalu berpikir itu akan terjadi. Anda selalu belajar sesuatu :)
kos
5

Alternatif lain adalah menggunakan xargs. Anda harus menggunakan -print0opsi dengan finddan -0opsi terkait xargs:

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

Dari man find:

-print0

cetak nama file lengkap pada output standar, diikuti dengan karakter nol . Ini memungkinkan nama file yang berisi baris baru atau jenis ruang putih lainnya diinterpretasikan dengan benar oleh program yang memproses hasil pencarian. Opsi ini sesuai dengan opsi -0 dari xargs.

xargsjuga akan menangani dengan benar ARG_MAX.

AP
sumber
2
find..exectidak menangani nama file yang aneh..apa yang membuat Anda berpikir tidak?
heemayl
1
@ heemayl Saya menjalankan beberapa tes dan sepertinya Anda benar. Saya berdiri dikoreksi. Terima kasih telah menunjukkannya, saya memperbarui jawaban saya.
AP