Secara rekursif chown semua file yang dimiliki oleh pengguna tertentu

32

Apakah mungkin untuk menemukan dan menandai semua file yang dimiliki oleh pengguna tertentu? Saya melakukan banyak hal sebagai pengguna yang salah dan perlu memberikan kepemilikan file yang benar kepada pengguna.

Apakah ada cara rekursif dan kondisional yang dapat saya lakukan untuk mengetahui banyak file dan direktori?

Air Terjun Michael
sumber

Jawaban:

60

Anda dapat menggunakan perintah find portable ini dengan sesuatu seperti ini.

find . -user old-user -exec chown new-user:new-group {} \;

Anda dapat memperluas ini untuk menemukan file tertentu dengan opsi -iname (bukan POSIX tetapi tersedia di OSX)

find . -iname '*.html' -user www-data -exec chown www-data:www-data {} \;

. singkatan folder saat ini dan di bawah, sehingga Anda dapat menggunakan jalur tertentu sebagai basis.

find /var/www/ -iname '*.html' -user www-data -exec chown www-data:www-data {} \;
StephenTrapped
sumber
Apa yang saya cari. Tetapi hanya untuk mencatat bahwa opsi setelah chown new-user:new-usermungkin harus mengatakannew-user:new-group
Henesnarfel
2
Saya menduga kurung keriting harus dalam tanda kutip untuk benar menangani jalur dengan spasi. Jadifind . -user old-user -exec chown new-user:new-group "{}" \;
Dan Benamy
Jika ada orang lain yang mencari cara menemukan file yang tidak dimiliki oleh pengguna tertentu (file pengguna di direktori home yang tidak dimiliki oleh pengguna itu), Anda dapat menambahkan '!' ke -user other-userbagian untuk menemukan yang sebaliknya. Sebagai contoh find . ! -user other-user,.
Jon
Seringkali hal di atas lebih bermanfaat saat Anda menambahkan -group old-group. Dengan begitu Anda dapat mempertahankan kepemilikan grup (admin, staf, sillyothergroupname)
brianlmerritt
ps - chown mungkin memerlukan sudo
brianlmerritt
12

Anda dapat gunakan

chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group  *

Dari manual chown --help:

  --from=CURRENT_OWNER:CURRENT_GROUP
                     change the owner and/or group of each file only if
                     its current owner and/or group match those specified
                     here.  Either may be omitted, in which case a match
                     is not required for the omitted attribute.

sunting : Ini, tentu saja, hanya berfungsi di linux dan sebagian besar UNIces. Untuk OSX (yang didasarkan pada BSD) lihat solusi @StephenTrapped.

Rik
sumber
+1 tetapi itu tidak akan berfungsi pada OSX, chowntidak memiliki opsi itu, lihat di sini .
terdon
Ups, memang, saya melewatkan tag osx :) Dipilih @StephenTrapped up.
Rik
chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group *akan melewati file tersembunyi di perintah folder dijalankan, namun chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group .berfungsi untuk file tersembunyi di folder induk juga.
Lashae
3

The -hpilihan chown mengubah izin dari file symbolic link sendiri dan bukan hanya target.

Yang bisa sangat penting ketika melakukan ini pada folder biner perangkat lunak, yang menggunakan tautan symoblic untuk beralih antar versi.

find . -user old-user -exec chown -h new-user:new-group {} \;

Tarun
sumber