บัตรเสริมคือการเลือกไดเรกทอรีทั้งหมดในไดเรกทอรี


13

ฉันต้องการตั้งค่า bit bit สำหรับไดเรกทอรีทั้งหมดในไดเรกทอรีที่ไม่รวมไฟล์ มีไวลด์การ์ดในการทำเช่นนี้หรือไม่?

#sudo chmod g+s /var/www/<WILD_CARD_FOR_ALL_DIRECTORIES>

คำตอบ:


24

ใช้*/เพื่อจับคู่ไดเรกทอรีเท่านั้น

chmod g+s /var/www/*/

เพื่อให้ตรงกับทุกไดเรกทอรีและไดเรกทอรีย่อยใช้**/*/(ให้คุณได้globstarเปิดใช้งานในทุบตี):

shopt -s globstar
chmod g+s /var/www/**/*/

2
ทำงานได้ดี แต่จะแตกเร็วความยาวบรรทัดคำสั่งที่ขยายเกินกว่าขีด จำกัด ความยาวบรรทัดคำสั่ง -> cyberciti.biz/faq/argument-list-too-long-error-solution
Bonsi สกอตต์

1
ใช่ฉันรู้ดี อย่างไรก็ตาม OP ขอรหัส "wildcard"
dogbane

ใช่! ฉันถามหา wildcard, thanq
Necktwi

ฉันรู้ว่าเขาถามหาวิธีแก้ปัญหา ฉันแค่ชี้ให้เห็นว่ามันจะล้มเหลวในบางสถานการณ์ อื่น ๆ ที่ไม่มี critc ให้ดูที่นี่ (ฉันได้แสดงความคิดเห็นยัง upvoted เพราะมันเป็นวิธีการแก้ปัญหาการทำงานสำหรับกรณีส่วนใหญ่) ^^
Bonsi Scott

13

คุณสามารถใช้ค้นหาดูตัวอย่างด้านล่าง

find /var/www/ -type d -exec chmod g+s {} \;

3
นี้เป็นสิ่งที่ดี แต่ไม่ใช่สัญลักษณ์แทน - แต่มันมีข้อได้เปรียบในการไม่ล้มเหลวเนื่องจากไดเรกทอรีจำนวนมาก
Bonsi Scott

โปรดทราบว่านี่คือการเรียกซ้ำโดยค่าเริ่มต้น หากคุณต้องการให้คำสั่งของคุณใช้กับระดับบนสุดคุณสามารถใช้-maxdepth findอาร์กิวเมนต์
Kris Harper

0

นี้ไม่ได้เป็นตัวแทนดังนั้นฉันขอโทษสำหรับที่ไม่ใช่คำตอบ แต่ ...
ls -al |grep ^d | awk '{print$NF}'จะมีรายการไดเรกทอรีทั้งหมดใน dir ปัจจุบันมันก็ขึ้นอยู่กับคุณที่จะตัดสินใจว่าคุณต้องการที่จะดำเนินการ.และ..หรือดึงพวกเขา

echo $(ls -al |grep ^d | awk '{print$NF}') มันทำให้มันทำงานเหมือนไวด์การ์ด


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