Mencari file TIDAK milik seseorang

182

Saya mencari untuk melihat secara rekursif direktori untuk menemukan file TIDAK dimiliki oleh pengguna tertentu dan saya tidak yakin bagaimana menulis ini.

mike628
sumber

Jawaban:

274

Utilitas find (1) memiliki primary yang dapat dinegasikan ("terbalik") menggunakan "!" operator. Namun pada prompt, seseorang harus melarikan diri dari negasi dengan backslash karena merupakan metacharacter shell. Hasil:

find . \! -user foo -print
Mel
sumber
6
melarikan diri !tampaknya menjadi opsional
doub1ejack
1
piping output ke xargs -I{} -P3 -- ${cmdhere} {}agar $ {cmdhere} beroperasi pada setiap file secara paralel. cmdhere :: = utix unix utils standar; standard unix utils :: = chmod, chown, stat, ls, ...
Dwight Spencer
1
@ Apakah Anda maksud find . ...atau pipa ke xargscara pertama atau kedua?
Kev
3
find memiliki flag -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens
1
bagaimana cara menambahkan info pemilik sebagai output?
Duc Tran
38

Mencari file TIDAK milik seseorang

Yang lain telah menjawab pertanyaan itu "TIDAK dimiliki oleh pengguna tertentu" di dalam tubuh. Inilah salah satu yang menjawab pertanyaan tituler tetapi belum disediakan:

$ find / -nouser

Anda dapat menggunakannya seperti ini:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

Dan yang terkait:

$ find / -nogroup
jww
sumber
3
Saya akan memberikan Anda suara untuk masalah teknis, tetapi orang-orang umumnya akan mengatakan "tidak dimiliki oleh siapa pun" jika mereka bermaksud apa yang Anda artikan.
Shibumi
2
@ Shibumi - Ya, sepertinya tepat untuk rambut yang membelah itu. Masalah yang saya hadapi adalah, saya perlu menemukan file yang benar-benar tidak dimiliki oleh pengguna mana pun. Itu muncul setelah penyegaran dan migrasi server web. Beberapa id pengguna / grup berubah sehingga saya perlu membuat skrip chown.
jww
12

-userditemukan oleh pengguna atau ID pengguna, dan !membalikkan predikat. Jadi, ! -user ....

Ignacio Vazquez-Abrams
sumber
2
Diturunkan karena tidak menambah apa pun pada jawaban yang diterima, dan menutupi kemungkinan jawaban lain (seperti pola zsh glob di bawah).
Ulysse BN
9

Anda bisa menggunakan ini:

find <dir> ! -user <username> 
Crayon Violent
sumber
2
Diturunkan karena tidak menambah apa pun pada jawaban yang diterima, dan menutupi kemungkinan jawaban lain (seperti pola zsh glob di bawah).
Ulysse BN
5

Menggunakan z-shell (zsh) yang dapat Anda gunakan

ls -laR *(^U)

atau

ls -la **/*(^U)

untuk mencari semua file secara rekursif yang bukan milik Anda.

AB
sumber
Memang benar bahwa perintah di atas tidak akan mencantumkan file dot, bahkan dengan -aflag karena ekspansi wildcard. Untuk menangkap dot file menggunakan zsh dotglobpilihan: setopt dotglob. Dalam satu baris: (setopt dotglob; ls **/*(^U) ). Tanda kurung dijalankan dalam subkulit sehingga Anda tidak harus menjalankan setopt nodotglobsetelah selesai.
Zorawar