ค้นหาไดเรกทอรีและไฟล์ที่มีสิทธิ์อื่นนอกเหนือจาก 775/664


21

ฉันกำลังย้ายเว็บไซต์จากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งและ Git ไม่ได้จัดเก็บข้อมูลเมตาเช่นการอนุญาตไฟล์ ฉันต้องการค้นหาไดเรกทอรีและไฟล์ที่ไม่ใช่ 775/664 ตามลำดับ

ตอนนี้ฉันกำลังใช้การคุมกำเนิดด้วยก้อนกรวดนี้:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

แม้ว่ามันจะใช้ได้ดี แต่ฉันรู้สึกว่ามันค่อนข้างแฮ็ก มีวิธีที่ดีกว่าในการทำเช่นนี้อาจเป็นวิธีมาตรฐานหรือฉันควรจะแฮ็ค?

สิ่งนี้ทำงานบน Ubuntu รุ่นล่าสุดด้วยเครื่องมือ GNU ภายใต้ Bash

คำตอบ:


39

ใช้การ-permทดสอบเพื่อfindร่วมกับ-not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775775ตรงกับไฟล์ทั้งหมดที่มีสิทธิ์เท่ากับ ไม่เหมือนกันสำหรับ-perm 664664
  • -not (บูลีน NOT) คัดค้านการทดสอบที่ตามมาดังนั้นจึงตรงกับสิ่งที่มันจะตรงกับ: ในกรณีนี้ไฟล์ทั้งหมดที่ไม่มีสิทธิ์ที่ถูกต้อง
  • -o(บูลีน OR) รวมการทดสอบสองชุดเข้าด้วยกันจับคู่เมื่อพวกเขาทำอย่างใดอย่างหนึ่ง: มันมีลำดับความสำคัญต่ำสุดดังนั้นจึงแบ่งการทดสอบของเราออกเป็นสองกลุ่มที่แตกต่างกัน คุณสามารถใช้วงเล็บให้ชัดเจนยิ่งขึ้น ที่นี่เราตรงกับไดเรกทอรีที่มีสิทธิ์ที่ไม่ได้และไฟล์ธรรมดาที่มีสิทธิ์ที่ไม่ได้775664

หากคุณต้องการสองคำสั่งแยกกันสำหรับไดเรกทอรีและไฟล์เพียงแค่ตัดครึ่ง-oและใช้แต่ละครึ่งแยกกัน


สวยขอบคุณ! ฉันไม่ทราบว่าสามารถตั้งเงื่อนไขสองแบบที่แตกต่างกันได้ (type -d และ type -f เป็นต้น) และฉันไม่ทราบเกี่ยวกับ -perm
dotancohen

อาจทราบว่า-notไม่ใช่มาตรฐาน POSIX; พวกเขาใช้!แทน
user1404316

2

ฉันไม่รู้ว่าโค้ดของคุณพยายามทำอะไร โดยทั่วไปแล้วเหตุผลในการค้นหาไฟล์และไดเรกทอรีที่มีการอนุญาตที่ไม่ถูกต้องนั้นมีวัตถุประสงค์เพื่อเปลี่ยนแปลงไฟล์เหล่านั้น

นี่คือสิ่งที่ฉันประสบความสำเร็จในการใช้ใน Ubuntu 16.04

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

สิ่งนี้แสดงให้เห็นถึง! สัญลักษณ์กำลังหลบหนี


ในความเป็นจริงเป้าหมายไม่ใช่เพื่อเปลี่ยนการอนุญาตของไฟล์ แต่เป็นการระบุว่าไฟล์ใดที่จำเป็นต้องมีสิทธิ์ในเกล็ดหิมะเมื่ออัพโหลดไปยังเว็บเซิร์ฟเวอร์ที่ใช้งานจริง ขอบคุณ
dotancohen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.