कैसे बैश में फ़ाइल टाइमस्टैम्प की तुलना करें?


17

मैं दो फाइलों के टाइमस्टैम्प की तुलना कैसे करूं?

मैंने यह कोशिश की लेकिन यह काम नहीं करता है:

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
आपके कोड को चौकोर कोष्ठक के चारों ओर रिक्त स्थान चाहिए।
जोनाथन लेफ़लर

समय के टिकटों की तुलना करने के लिए अंतर्निहित तंत्र की तुलना में परीक्षण तंत्र बहुत जटिल है।
जोनाथन लेफ्लर

जवाबों:


26

समय टिकटों की तुलना करने के लिए ऑपरेटर हैं:

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

महामारी आसान है: 'से नया' और 'से पुराना'।


5

इसकी वजह है कुछ मिसिंग स्पेस। [एक कमांड है, इसलिए इसके चारों ओर रिक्त स्थान होना चाहिए और ]यह बताने के लिए एक विशेष पैरामीटर है कि इसकी कॉमैंड लाइन कहां समाप्त होती है। तो, आपकी टेस्ट लाइन इस तरह दिखनी चाहिए:

if [ $file1time -gt $file2time ];

3
[एक परीक्षण कमांड है - bashमैन पेज का "कंडिशनल एक्सप्रेशंस" अनुभाग देखें । वहाँ भी में एक स्टैंडअलोन निष्पादन योग्य है /usr/bin/testऔर /usr/bin/[, लेकिन आप बैश उपयोग कर रहे हैं और पूरा पथ का उपयोग नहीं, यो u're खोल builtin का उपयोग कर।
डग हैरिस

विषय के बारे में अधिक संपूर्ण विवरण के लिए @ डॉग हैरिस +1।
गोएडसन

1

ifजादू नहीं है। यह पास की गई कमांड को चलाने का प्रयास करता है, और जाँच करता है कि क्या यह शून्य निकास स्थिति है। यह गैर-मौजूद तर्कों को भी अच्छी तरह से संभालता नहीं है, यही कारण है कि आपको इसमें उपयोग किए जा रहे चर का उद्धरण करना चाहिए।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.