ব্যাশে ফাইল টাইমস্ট্যাম্পগুলি কীভাবে তুলনা করবেন?


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
আপনার কোডটির বর্গাকার বন্ধনীগুলির চারপাশে স্পেস দরকার।
জোনাথন লেফলার

টাইম স্ট্যাম্পগুলির সাথে তুলনা করার জন্য বিল্ট ইন মেকানিজমের সাথে তুলনা করে পরীক্ষা পদ্ধতিটি খুব জটিল।
জোনাথন লেফলার

উত্তর:


26

টাইম স্ট্যাম্পের তুলনা করার জন্য অপারেটরগুলি হলেন:

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

স্মৃতিচারণা সহজ: 'এর চেয়ে আরও নতুন' এবং 'এর চেয়ে পুরনো'।


5

এটি কিছু স্থান ফাঁকা থাকার কারণে। [একটি কমান্ড, সুতরাং এটির চারপাশে অবশ্যই ফাঁকা স্থান থাকতে হবে এবং ]এর কোমন্ড লাইনটি কোথায় শেষ হয় তা জানাতে এটি একটি বিশেষ প্যারামিটার। সুতরাং, আপনার পরীক্ষার লাইনের মতো দেখতে হবে:

if [ $file1time -gt $file2time ];

3
[এটি একটি পরীক্ষা কমান্ড - bashম্যান পৃষ্ঠার "শর্তসাপেক্ষ এক্সপ্রেশনস" বিভাগটি দেখুন । এছাড়া একটি স্বতন্ত্র এক্সিকিউটেবল এর /usr/bin/testএবং /usr/bin/[, কিন্তু আপনি ব্যাশ ব্যবহার করছেন এবং সম্পূর্ণ পাথ ব্যবহার করছেন না, ইও u're শেল builtin ব্যবহার করে।
ডগ হ্যারিস 13

বিষয়টি সম্পর্কে আরও সম্পূর্ণ ব্যাখ্যার জন্য @ ডগ হ্যারিস +1 করুন।
গোডসন

1

ifযাদু নয়। এটি এতে প্রদত্ত কমান্ডটি চালানোর চেষ্টা করে এবং এটির শূন্য প্রস্থান স্থিতি রয়েছে কিনা তা পরীক্ষা করে। এটি অস্তিত্বহীন আর্গুমেন্টগুলিও ভালভাবে পরিচালনা করে না, এজন্য আপনার এতে ব্যবহারযোগ্য ভেরিয়েবলগুলি উদ্ধৃত করা উচিত।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.