ใน FreeBSD และใน Linux ฉันจะรับchmodค่าตัวเลขของไฟล์ได้อย่างไร ตัวอย่างเช่น644แทนที่จะเป็น-rw-r--r--? ฉันต้องการวิธีอัตโนมัติสำหรับสคริปต์ Bash
ใน FreeBSD และใน Linux ฉันจะรับchmodค่าตัวเลขของไฟล์ได้อย่างไร ตัวอย่างเช่น644แทนที่จะเป็น-rw-r--r--? ฉันต้องการวิธีอัตโนมัติสำหรับสคริปต์ Bash
คำตอบ:
คุณสามารถรับค่าโดยตรงโดยใช้รูปแบบเอาต์พุต stat เช่น BSD / OS X:
stat -f "%OLp" <file>
หรือใน Linux
stat --format '%a' <file>
และใน busybox
stat -c '%a' <file>
busyboxการใช้งานstat -c '%a' <file>
--formatสามารถย่อ-cได้ ใช้งานได้:stat -c %a <file>
ใช้stat YOUR_FILEยกเว้นเขียนสคริปต์ที่คำนวณ:
rwx rwx rwx ==> ( r = 4 ) if set + ( w = 2) if set + (x = 1) if set , for example:
You have :
-rw-wxrw- => (4+2+0)(0+2+1)(4+2+) = 0636
First argument before 9 permissions is one of :
- = regular file
d = directory
b = block device
c = character device
s = socket
p = pipe
f = fifo
โดยวิธีการที่ผมใช้stat commandในLinux boxไม่freebsdเพราะมันตรวจสอบอาจจะทำงานร่วมกับHFSUFS
FreeBSD boxแล้วใช้stat -x YOUR_FILEภายใต้FreeBSD box
stat -r YOUR_FILE |awk '{print $3}' ให้สิทธิ์ของคุณ
666 หรือรหัส-rw-wxrw- เท่านั้น แต่เป็นข้อความที่มีคำอธิบายเกี่ยวกับสิทธิ์แต่ละรายการ
awkเพื่อคืนค่าผลลัพธ์เป็นตัวเลข
ข้อมูลเพิ่มเติมเกี่ยวกับstat:
$ stat -c %a file.txt
777
$ stat -c %A file.txt
-rwxrwxrwx
stat -f %A file.txtภายใต้ mac มันจะคืนค่า 644 หรือตัวเลขดิจิตอล 3 ตัว
ลองนี้เพื่อแสดงรายการทั้งหมด
stat --format "%a %n" *