Ubah kepemilikan semua file, dari satu pemilik ke yang lain

1

Saya mengubah nama pendek dari akun pengguna saya, tetapi tampaknya telah menyebabkan masalah dengan beberapa file (terutama barang-barang homebrew), yang masih dimiliki oleh nama pengguna lama. Nama pendek lama saya adalah cannyboy, dan nama baru saya adalah cannyman. Bagaimana saya akan pergi melalui seluruh hard drive dan mengubah kepemilikan semua cannyboy untuk cannyman, tanpa mengubah atribut file lainnya?

wildebeesty
sumber

Jawaban:

3

Sebagai pemula, saya sarankan Anda menjalankan fungsi "izin perbaikan" di utilitas disk.

Jika masalah masih berlanjut, Anda dapat menjalankan perintah seperti:

find . -user old_user | while read file; do echo chown new_user  $file; done

Catatan: ini tidak melakukan apa-apa seperti sekarang - Anda harus menyesuaikannya dengan kebutuhan Anda - dan pastikan tidak ada yang buruk.

memperbarui belajar lebih banyak dan sekarang saya akan menjalankan perintah seperti ini:

find . -user old_user -print0 | xargs -0  sudo echo chown new_user

sekali lagi sesuaikan perintah sebelum Anda menjalankannya!

bdecaf
sumber
Saya mencoba menjalankan perintah sebagai find. -user old_user | saat membaca file; do chown new_user \ "$ file \"; dilakukan tetapi tidak bekerja dengan file dengan spasi. bagaimana kita mencapai perintah ini dengan file dengan spasi?
Laxman
Saya menambahkan baris seperti yang akan saya lakukan saat ini - yang berfungsi bahkan dengan spasi dan karakter aneh.
bdecaf
2

FWIW mengubah nama pendek dianggap "buruk." Kira Anda bisa melihat mengapa sekarang.

Yang mengatakan, salah satu cara untuk mengatasi ini adalah dengan menggunakan "find" untuk menemukan semua file yang dimiliki oleh cannyboy:

find * -user cannyboy

(hanya untuk homebrew Anda dapat membatasi ini pada hirarki / usr / local / folder seperti):

find -f /usr/local/* -user cannyboy

Perulangan selanjutnya melalui hasil dengan:

sudo chown cannyboy cannyman *file*

perhatikan perintah di atas akan membutuhkan sudo dan jika Anda mengacaukannya dapat menyebabkan masalah lebih lanjut.

Untuk melakukan ini dalam proses dua langkah, pertama:

find -f /usr/local/* -user cannyboy > files.txt

Kemudian putar melalui files.txt menggunakan skrip berikut (dengan sudo):

#!/bin/bash

while read file;
do
    chown cannyboy cannyman $file
done

Keuntungan dari ini adalah Anda dapat menggunakan subset dari file txt Anda untuk menguji semuanya sebelum Anda berkomitmen untuk perubahan besar-besaran.

Jika Anda berani, Anda dapat mencoba proses satu langkah (ini seharusnya berhasil, tetapi mungkin tidak):

#/bin/bash
for result in `find -f /usr/local/* -user cannyboy`
do
    chown cannyboy cannyman $result
done

(BTW sebelum Mac OS X 10.8.1 ada bug menemukan jahat yang akan menghilangkan beberapa hasil)

sdmeyers
sumber