ฉันใช้stat -f %m .bashrc
เพื่อรับเวลาการแก้ไขของ. bashrc บน osx แต่เมื่อฉันเรียกใช้คำสั่งเดียวกันบน Ubuntu มัน spits ข้อผิดพลาด:
stat: cannot read file system information for %m': No such file or directory
มีวิธีที่เข้ากันได้เพื่อให้บรรลุนี้
ฉันใช้stat -f %m .bashrc
เพื่อรับเวลาการแก้ไขของ. bashrc บน osx แต่เมื่อฉันเรียกใช้คำสั่งเดียวกันบน Ubuntu มัน spits ข้อผิดพลาด:
stat: cannot read file system information for %m': No such file or directory
มีวิธีที่เข้ากันได้เพื่อให้บรรลุนี้
คำตอบ:
Ubuntu ใช้ coreutils ของ GNU stat
ในขณะที่ OSX ใช้ตัวแปร BSD ดังนั้นใน Ubuntu คำสั่งต่างออกไปเล็กน้อย:
stat -c %Y .bashrc
จากman stat
:
-c --format=FORMAT use the specified FORMAT instead of the default; output a new‐ line after each use of FORMAT
และ:
%Y time of last data modification, seconds since Epoch
หากคุณต้องการวิธีพกพาในการเรียกใช้สิ่งเหล่านี้โดยไม่คำนึงถึงระบบปฏิบัติการแสดงว่ามีหลายวิธีในการทำเช่นนั้น ฉันคิดว่าฉันจะตั้งค่าตัวแปรหนึ่งครั้งเป็นพารามิเตอร์ที่เหมาะสม:
if uname | grep -q "Darwin"; then
mod_time_fmt="-f %m"
else
mod_time_fmt="-c %Y"
fi
จากนั้นใช้ค่านี้ในstat
คำสั่งที่ต้องการ:
stat $mod_time_fmt .bashrc
ขึ้นอยู่กับความหมายของคำว่า "นี่" หากคุณถามว่ามีวิธีพกพาในการรับไฟล์mtime
ด้วยstat(1)
หรือไม่ไม่ใช่ไม่มี BSD จะแตกต่างจากลินุกซ์stat(1)
stat(1)
หากคุณถามว่ามีวิธีพกพาในการรับไฟล์mtime
หรือไม่ใช่คุณสามารถทำได้ด้วยperl(1)
:
perl -e 'print +(stat $ARGV[0])[9], "\n"' file
เนื่องจาก OSX และ Ubuntu เวอร์ชันของstat
มีความแตกต่างบางอย่างในstat
ค่าเริ่มต้นของOSX ที่เป็น terse output และstat
ค่าเริ่มต้นของLinux เพื่อ verbose ห่วงบางอย่างจะต้องมีการข้ามผ่าน ความเป็นไปได้อย่างหนึ่งคือการใช้นามแฝงบน OSX จะทำให้สถิติทำงานเหมือนกันทั้งคู่
หากคุณไม่ต้องการตั้งค่านามแฝงเพื่อบังคับเอาท์พุท verbose ของstat
บน OSX ด้วยalias stat="stat -x"
แล้วคุณไม่จำเป็นต้อง perl
stat .bashrc| grep Modify
คือทั้งหมดที่คุณต้องการภายใต้ Ubuntu หากคุณตั้งค่านามแฝงดังกล่าวจะทำงานภายใต้OSX เช่นกัน
ตัวอย่างจาก Ubuntu 14.04.5 สามารถดูผลลัพธ์ที่เหมือนจริงได้จาก Ubuntu 16.04
stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500
หากสิ่งที่คุณต้องการคือเวลาที่คุณสามารถดึงModify:
และรักษาส่วนที่เหลือด้วย
stat .bashrc| grep Modify | cut -c 9-
แหล่งที่มา: