วิธีการเปรียบเทียบการประทับเวลาของไฟล์ในทุบตี?


16

ฉันจะเปรียบเทียบเวลาประทับของสองไฟล์ได้อย่างไร

ฉันลองสิ่งนี้ แต่มันไม่ทำงาน:

file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
 doSomething
fi

ฉันพิมพ์ทั้งการประทับเวลาตามลำดับและให้ฉัน

1273143480
1254144394
./script.sh: line 13: [1273143480: command not found

โดยพื้นฐานแล้วถ้าการเปรียบเทียบไม่ทำงานฉันเดาว่า หรือถ้ามีวิธีอื่นที่ดีกว่าสิ่งที่ฉันกำลังทำอยู่โปรดแจ้งให้เราทราบ ฉันต้องเปลี่ยนอะไร


1
รหัสของคุณต้องการช่องว่างรอบ ๆ วงเล็บเหลี่ยม
Jonathan Leffler

กลไกการทดสอบนั้นซับซ้อนมากเมื่อเทียบกับกลไกภายในเพื่อเปรียบเทียบการประทับเวลา
Jonathan Leffler

คำตอบ:


26

ตัวดำเนินการสำหรับการเปรียบเทียบการประทับเวลาคือ:

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

ช่วยในการจำง่าย: 'ใหม่กว่า' และ 'เก่ากว่า'


5

นี่เป็นเพราะช่องว่างที่ขาดหายไปบางส่วน [เป็นคำสั่งดังนั้นจึงต้องมีช่องว่างรอบ ๆ และ]เป็นพารามิเตอร์พิเศษเพื่อบอกว่าที่บรรทัด comand สิ้นสุด ดังนั้นบรรทัดทดสอบของคุณควรมีลักษณะดังนี้:

if [ $file1time -gt $file2time ];

3
[เป็นคำสั่งทดสอบ - ดูส่วน "การแสดงออกตามเงื่อนไข" ของbashหน้าคน นอกจากนี้ยังมีไฟล์ปฏิบัติการแบบสแตนด์อโลนใน/usr/bin/testและ/usr/bin/[ถ้าคุณใช้ bash และไม่ได้ใช้เส้นทางแบบเต็มคุณจะใช้ shell builtin
Doug Harris

@Doug Harris +1 สำหรับคำอธิบายที่สมบูรณ์ยิ่งขึ้นเกี่ยวกับหัวข้อ
goedson

1

ifไม่ใช่เวทมนตร์ มันพยายามรันคำสั่งที่ส่งไปยังคำสั่งนั้นและตรวจสอบว่ามันมีสถานะเป็นศูนย์ทางออกหรือไม่ นอกจากนี้ยังไม่สามารถจัดการกับอาร์กิวเมนต์ที่ไม่มีอยู่ได้ดีซึ่งเป็นสาเหตุที่คุณควรอ้างอิงตัวแปรที่ใช้ในนั้น

if [ "$file1time" -gt "$file2time" ]

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