วิธีการ chmod และ chown ไฟล์ที่ซ่อนอยู่ใน Linux?


33

ฉันจะเรียกใช้ซ้ำchmodหรือทำซ้ำchownไฟล์ที่ซ่อนอยู่ได้อย่างไร

sudo chmod -R 775 * ไม่ทำงานกับไฟล์ที่ซ่อน

สิ่งเดียวกันเกิดsudo chown -R user:groupขึ้น

คำตอบ:


35

หากคุณไม่เป็นเช่นนั้นการทำไดเรกทอรีปัจจุบันให้ทำเช่นนั้นแล้วปล่อยให้-Rหนักขึ้น -Rไม่ละเว้นไฟล์ที่ซ่อนอยู่

sudo chmod -R 775 .

14
นี่* .*ไม่ใช่วิธีที่ปลอดภัยที่สุดที่จะทำ โดยเฉพาะอย่างยิ่งมันจะเก็บในไดเรกทอรีหลักซึ่งหมายความว่ามันchmodเป็นพี่น้องของไดเรกทอรีปัจจุบัน วิธีการที่เหมาะสมที่จะเป็น* ..?* .[^.]*หรือดียิ่งขึ้น (พิจารณาสัญลักษณ์อาจไม่ตรงกับไฟล์ใด ๆ$(ls -A))
jpalecek

1
@jpalecek: เอาต์พุตของไม่lsสามารถค้นหาได้ พยายามแยกมันกำลังถามหาปัญหา แนวทางที่เหมาะสมคือการใช้เปลือกกลม
Scott Severance

แม้ว่าใน linux คุณมีความสามารถในการเปลี่ยนลำดับของ args สำหรับ chmod เมื่อทำสคริปต์ x-plat ระหว่าง linux และ OS X นี่เป็นคำสั่งที่คุณควรใช้เช่นsudo chmod 775 -Rจะหายไปดังนั้นตอบคำถามนี้ .
kayleeFrye_onDeck

35

* ไม่รวมไฟล์ที่ซ่อนอยู่ตามค่าเริ่มต้น แต่หากคุณกำลังทุบตีคุณสามารถทำได้ด้วย:

shopt -s dotglob

อ่านเพิ่มเติมเกี่ยวกับมันในbuiltinคู่มือของ bash :

หากตั้งค่า Bash จะมีชื่อไฟล์ที่ขึ้นต้นด้วย `. ' ในผลลัพธ์ของการขยายชื่อไฟล์

สิ่งนี้จะทำให้*รวมไฟล์ที่ซ่อนไว้ด้วย

chmod -R 775 *

ปิดใช้งานด้วย:

shopt -u dotglob

2
วิธีการทำว่าในzsh?
ไม่มีอะไรพิเศษ - ที่นี่

2
คุณใช้ตัวระบุ(D)คุณสมบัติแบบchmod -R 775 *(D)
กลม

2

อีกทางเลือกหนึ่งคือใช้findฉันชอบเพราะคุณสามารถควบคุมมันได้อย่างละเอียด

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

ข้อเสียเพียงอย่างเดียวคือว่าfindมีไวยากรณ์ที่แตกต่างกันในรุ่นที่แตกต่างกัน


2

ไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันซ้ำรวมถึงไฟล์ที่ซ่อนอยู่:

chmod 755 -R ./* ./.[!.]*

ไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันไม่วนซ้ำรวมถึงไฟล์ที่ซ่อนอยู่:

chmod 755 ./* ./.[!.]*

สิ่งนี้จะไม่เปลี่ยนชื่อไฟล์ยกเว้นที่เริ่มต้นด้วย 2 จุดเช่น "./..thisonescapesunharmed.txt"

นอกจากนี้ระวังอย่าลบ "x" บิตมิฉะนั้นไดเรกทอรีทั้งหมดของคุณจะไม่สามารถเข้าถึงได้ (หนึ่งต้องการบิต x เพื่อ cd เป็น dir)

จำการแจ้งเตือนนี้: อย่าใช้งานเลย*แต่./*ใช้แทน

เพื่อหลีกเลี่ยงปัญหาในการตั้งค่าการอนุญาตในไดเรกทอรีให้ใช้findแทน

find . -type f -exec chmod `VALUE` {} \;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.