ฉันใช้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-
แหล่งที่มา: