กำลังมองหาไฟล์ที่ไม่ได้เป็นของใครบางคน


182

ฉันต้องการค้นหาไดเรกทอรีซ้ำ ๆ เพื่อค้นหาไฟล์ที่ไม่ได้เป็นของผู้ใช้คนหนึ่งและฉันไม่แน่ใจว่าจะเขียนสิ่งนี้อย่างไร

คำตอบ:


274

ยูทิลิตี find (1) มีอุปกรณ์ที่สามารถคัดค้าน ("กลับด้าน") โดยใช้ "!" ผู้ประกอบการ บนพรอมต์เราจะต้องหลีกเลี่ยงการถูกปฏิเสธด้วยแบ็กสแลชเนื่องจากเป็นเชลล์เมตาอักขระ ผลลัพธ์:

find . \! -user foo -print

6
การหลบหนี!ดูเหมือนจะเป็นตัวเลือก
doub1ejack

1
การวางท่อเอาต์พุตเพื่อให้xargs -I{} -P3 -- ${cmdhere} {}$ {cmdhere} ทำงานกับแต่ละไฟล์พร้อมกัน cmdhere :: = utils unix มาตรฐาน utils unix มาตรฐาน :: = chmod, chown, stat, ls, ...
Dwight Spencer

1
@sorin คุณหมายถึงfind . ...หรือ piping กับxargsวิธีแรกหรือวิธีที่สอง?
Kev

3
find has the -exec flag -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens

1
วิธีเพิ่มข้อมูลเจ้าของเป็นผลลัพธ์
Duc Tran

38

กำลังมองหาไฟล์ที่ไม่ได้เป็นของใครบางคน

คนอื่น ๆ ได้ตอบคำถามที่ว่า "ไม่ได้เป็นของผู้ใช้คนหนึ่ง"ในร่างกาย ต่อไปนี้เป็นคำถามที่ตอบคำถาม แต่ไม่ได้ให้ไว้:

$ find / -nouser

คุณสามารถใช้มันได้เช่น:

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

และหนึ่งที่เกี่ยวข้อง:

$ find / -nogroup

3
ฉันจะให้คะแนนคุณกับด้านเทคนิค แต่คนทั่วไปจะพูดว่า "ไม่ได้เป็นของใคร" ถ้าพวกเขาหมายถึงสิ่งที่คุณตีความ
Shibumi

2
@Shibumi - ใช่ฟังดูเหมาะสมสำหรับผมที่แยกออกมา ปัญหาที่ฉันเผชิญคือฉันต้องการค้นหาไฟล์ที่ผู้ใช้ไม่ได้เป็นเจ้าของ มันโผล่ขึ้นมาหลังจากการรีเฟรชและย้ายเว็บเซิร์ฟเวอร์ รหัสผู้ใช้ / กลุ่มบางรายการเปลี่ยนไปดังนั้นฉันต้องสคริปต์ chown
jww

12

-userค้นหาโดยผู้ใช้หรือ ID ผู้ใช้และกลับ!ค่าเพรดิเคต ดังนั้น! -user ....


2
ลดลงเพราะไม่ได้เพิ่มอะไรเลยลงในคำตอบที่ยอมรับและปิดบังคำตอบที่เป็นไปได้อื่น ๆ (เช่นรูปแบบ zsh glob ด้านล่าง)
Ulysse BN

9

คุณสามารถใช้สิ่งนี้:

find <dir> ! -user <username> 

2
ลดลงเพราะไม่ได้เพิ่มอะไรเลยลงในคำตอบที่ยอมรับและปิดบังคำตอบที่เป็นไปได้อื่น ๆ (เช่นรูปแบบ zsh glob ด้านล่าง)
Ulysse BN

5

การใช้ z-shell (zsh) คุณสามารถใช้ได้

ls -laR *(^U)

หรือ

ls -la **/*(^U)

เพื่อค้นหาไฟล์ทั้งหมดที่คุณไม่ได้เป็นเจ้าของซ้ำ


มันเป็นความจริงที่คำสั่งด้านบนจะไม่แสดงรายการไฟล์ dot แม้จะมีการ-aตั้งค่าสถานะเนื่องจากการขยายสัญลักษณ์ จะจับไฟล์ dot ใช้ zsh ตัวเลือก:dotglob setopt dotglobในหนึ่งบรรทัด: (setopt dotglob; ls **/*(^U) ). วงเล็บจะต้องทำงานใน subshell เพื่อที่คุณจะได้ไม่ต้องวิ่งsetopt nodotglobหลังจากเสร็จสิ้น
Zorawar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.