ใน 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
เพราะมันตรวจสอบอาจจะทำงานร่วมกับHFS
UFS
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" *