ฉันจะ chmod / chown รายการไฟล์เฉพาะได้อย่างไร


31

ฉันต้องการเขียนสคริปต์. sh เพื่อตั้งค่าการอนุญาตบางโฟลเดอร์ แต่สงสัยว่าฉันสามารถเรียกใช้บางอย่างเช่น:

chown -644 ./one;/two;/three

เพื่อ chown รายการโฟลเดอร์แทนที่จะโทร chown หลายครั้ง

นอกจากนี้จะมีวิธีในการ chown รายการไฟล์และไม่รวมไฟล์อื่น ๆ เช่น:

chown -R -664 ./*;!./cache

ฉันหวังว่าบรรทัดคำสั่งหลอกของฉันจะสมเหตุสมผล

คำตอบ:


43

เครื่องมือ Unix เกือบทั้งหมดยอมรับรายการของไฟล์เป็นอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก ตามปกติแล้วอาร์กิวเมนต์ที่แตกต่างกันจะต้องคั่นด้วยช่องว่าง

chown 644 one two three

ในตัวอย่างที่สองของคุณถ้าคุณใช้ Bash ง่าย ๆ

chown -R 644 !(cache)

จะเพียงพอ

วิธีนี้ต้องใช้การจับคู่รูปแบบเพิ่มเติม หากปิดใช้งานอยู่คุณสามารถเปิดใช้งานได้ด้วย

shopt -s extglob

ดู: คู่มืออ้างอิง Bash # การจับคู่รูปแบบ


4

ทำรายการชื่อไฟล์ใน mod-These.txt แล้วเรียกใช้:

chmod g+w `cat mod-these.txt`

หรือใช้วิธีการที่ผู้อื่นอธิบายไว้ที่นี่:

chown 644 one two three

หรือไปที่เมืองด้วยตัวเลือกแรก แต่จัดการแต่ละบรรทัดในไฟล์ (ในตัวอย่างนี้: แทนที่ "/" (ด้วยช่องว่างก่อนหน้านี้) ด้วย "./"):

chmod g+w `sed 's/ \// .\//' update-writable.txt` 

2

regex สำหรับผู้ชนะ!

การใช้ find เป็นวิธีที่ดีที่สุดที่ฉันคิดนอกการใช้ regex ที่อาจมีอยู่แล้วในเชลล์เฉพาะของคุณหรือภายในแอพที่คุณใช้งานอยู่ ก่อนอื่นฉันลอง:

touch one&touch two &touch three&find -name "one|two|three" -exec chown -644 {} \;

แต่คุณจะพบว่าท่อไม่ทำงานในกรณีนี้ สิ่งที่น่าเศร้าอีกอย่างที่ต้องเรียนรู้ ... เช่นการเรียนรู้ chmod, chown, chgrp, et อัล ไม่รองรับการเลือก / ยกเว้นตัวเลือกหลายไฟล์ / regex เอง ...
วิธีแก้ปัญหาที่ฉันพบ:
/programming/19111067/regex-match-either-string-in-linux-find-command

find \( -name one -o -name two -o -name three \) -exec chown -644 {} \;

ดังนั้นไม่ regex มากสำหรับการชนะ แต่อย่างน้อยเรามีวิธีการฉีดรายการไฟล์ลงใน args ของโปรแกรมในหนึ่งซับ

คุณจะทราบว่าคุณต้องหลีกเลี่ยง meta-characters และการเพิ่มพารามิเตอร์ -o สำหรับชื่อเพิ่มเติมแต่ละชื่อ ...

ลิงก์และเนื้อหาอื่น ๆ จากฉันซึ่งคุณอาจสนใจในการเดินทางของคุณ:
เกร็ดความรู้ต่าง ๆ - บันทึกจากกรณ์บอร์นและเพื่อน ๆ - เว็บไซต์ของ Dave Horner

ไชโย
--dave


จูบชนะทำให้มันง่ายและโง่! ไม่จำเป็นต้องมีสิ่งที่ซับซ้อนที่สามารถยังคงสะอาดและง่าย
Al-Mothafar

2

หากไฟล์ที่คุณต้องการแก้ไขอยู่ในไดเรกทอรีเดียวคุณสามารถ ls พวกเขาด้วยรูปแบบที่จำเป็น

เช่นฉันต้องการไฟล์. run ทั้งหมดที่ดาวน์โหลดใน pwd เพื่อเปลี่ยนเป็นไฟล์เรียกทำงาน:

chmod +x `ls *.run`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.