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.

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

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

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 ....


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> 

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.