ดูเหมือนว่า 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
ในไดเรกทอรีมีผลข้างเคียงที่คุณเปลี่ยนการอนุญาตในไดเรกทอรีเองรวมถึงเนื้อหาทั้งหมดซึ่งอาจหรืออาจไม่ใช่สิ่งที่คุณต้องการ