ดูเหมือนว่า chown ด้วยแฟล็ก recursive จะไม่ทำงานกับไดเร็กทอรีหรือไฟล์ที่ซ่อน มีวิธีแก้ปัญหาง่าย ๆ สำหรับสิ่งนั้นหรือไม่?
ดูเหมือนว่า chown ด้วยแฟล็ก recursive จะไม่ทำงานกับไดเร็กทอรีหรือไฟล์ที่ซ่อน มีวิธีแก้ปัญหาง่าย ๆ สำหรับสิ่งนั้นหรือไม่?
คำตอบ:
ฉันค่อนข้างมั่นใจว่า-Rธงใช้งานได้ - มันมีไว้สำหรับฉันเสมอ สิ่งที่ใช้ไม่ได้ผลและสิ่งที่ทำให้ฉันสะดุดในช่วงต้นของการใช้บรรทัดคำสั่งคือใช้*ในไดเรกทอรีที่มีไฟล์ / ไดเรกทอรีที่ซ่อนอยู่ ดังนั้นการทำ
$ chown -R /home/user/*
จะไม่ทำไฟล์และไดเรกทอรีที่ซ่อนอยู่ อย่างไรก็ตามหากคุณติดตามด้วย
$ chown -R /home/user/.[^.]*
จากนั้นคุณจะทำทุกไฟล์ที่ซ่อนอยู่ (แต่ไม่ใช่.หรือ..เป็นไปตาม/home/user/.*นั้น) ต้องบอกว่าฉันคาดหวัง
$ chown -R /home/user
เพื่อให้ได้ไฟล์และไดเรกทอรีที่ซ่อนอยู่ภายใน/home/user- แม้ว่าแน่นอนว่าจะเปลี่ยนสิทธิ์ของไดเรกทอรีเองด้วยซึ่งอาจไม่ใช่สิ่งที่คุณตั้งใจ
chown nginx:nginx -R /path/to/.[^.]*และมันเปลี่ยนความเป็นเจ้าของเป็นไฟล์ที่ซ่อนไว้เท่านั้น ไม่ทั้งหมด.
                    *และติดตามด้วย.[.^]*เพื่อรับไฟล์ทั้งหมด
                    ฉันเชื่อว่าคำสั่งต่อไปนี้จะทำงานสำหรับเรื่องนี้
chown -hR userid:usergroup /nameofdirectory/nameofsubdir/
"chown -R" ใช้งานได้ แต่จะมีทางเลือกอื่นให้ใช้ find
 find /path/to/dir -exec chown USER {} \;
+แทน;เป็นเทอร์มิเพื่อ -exec จะมีประสิทธิภาพมากขึ้นในขณะที่มันจะใช้จำนวนขั้นต่ำที่จำเป็นของส้อม chown แทนหนึ่งส้อมต่อไฟล์ / directory
                    คุณสามารถเปลี่ยนdotglobคุณสมบัติชั่วคราวเพื่อขยาย ไฟล์และย้อนกลับ
shopt -s dotglob; chown -R user:group FOLDER; shopt -u dotglob
ข้อมูลเพิ่มเติมdotglobสามารถพบได้ที่นี่
ใช้สำหรับวงที่มีls -Aตัวเลือกที่เราสามารถหาไฟล์ที่ซ่อนอยู่และไดเรกทอรียกเว้น.และ..แล้วเปลี่ยนความเป็นเจ้าของสำหรับไฟล์ที่ซ่อนอยู่และไดเรกทอรี
for i in `ls -A | grep "^\."`;do chown -R user:group $i;done
ใช้xargsตัวเลือกด้วยls -A 
ls -A | grep "^\." | xargs chown user:group
สำหรับรายละเอียดเพิ่มเติมคลิกที่นี่และเยี่ยมชมเว็บไซต์ของฉัน
นอกจากนี้หากคุณเป็นเหมือนฉันคุณอาจจะกำลัง chown ส่วนใหญ่จากไดเรกทอรีปัจจุบัน ฉันคุ้นเคยกับการใช้งานแบบนี้: chown rails.rails -R *. เพียงเปลี่ยนเครื่องหมายดอกจันเป็นจุด (ย่อมาจากไดเรกทอรีปัจจุบัน) ดังนี้: chown rails.rails -R .นำไดเรกทอรีที่ซ่อนอยู่ทั้งหมด
chownจะทำงานกับไฟล์และไดเรกทอรีที่ซ่อนอยู่ ในตัวอย่างต่อไปนี้เราจะมีการเปลี่ยนแปลงของผู้ใช้และกลุ่มเจ้าของสำหรับทุก~/some/folderไฟล์ใน ทุกไฟล์รวมทั้งหมดซ่อนไฟล์ (เช่น.bashrc, .profileฯลฯ ) และโฟลเดอร์ที่~/some/folderระดับต่ำกว่า โปรดทราบว่าเราไม่ต้องการเปลี่ยนความเป็นเจ้าของ~/someดังนั้นเราจะแยกไฟล์~/some/..ออกจากการเปลี่ยนแปลงความเป็นเจ้าของ
$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 
หากต้องการ chown ไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยสำหรับผู้ใช้ปัจจุบัน
find . -exec chown $(whoami) {} \;
หรือหากผู้ใช้ไม่สามารถ chown ไฟล์บางไฟล์เนื่องจากสิทธิ์ที่ จำกัด ;
sudo find . -exec chown $(logname) {} \;
คุณสามารถทำสิ่งที่ชอบ
for i in `ls -A`;do chown -R user:group $i;done
-A( ทุน A) เป็นสิ่งสำคัญที่จะไม่รวม '' และ '.. '
chownในไดเรกทอรีมีผลข้างเคียงที่คุณเปลี่ยนการอนุญาตในไดเรกทอรีเองรวมถึงเนื้อหาทั้งหมดซึ่งอาจหรืออาจไม่ใช่สิ่งที่คุณต้องการ