ব্যাশ-এ ফাইল 1 এর চেয়ে নতুন ফাইল 2 কীভাবে যাচাই করবেন?


51

আমি কীভাবে যাচাই করতে পারি যে file2এটির পরে সর্বশেষ সংশোধিত হয়েছিল file1?

এই উদাহরণে, perlআরও সম্প্রতি পরিবর্তিত হয়েছিল stack। এমন কোনও বাশ বা লিনাক্স কমান্ড রয়েছে যে পরিবর্তনের সময়ের উপর ভিত্তি করে এই ফাইলগুলির তুলনা করতে পারে ?

-rw-r--r--    1 root     root         1577 Sep  7 22:55 stack
-rwxr-xr-x    1 root     root          626 Sep  7 23:10 perl

উত্তর:


51

এটি এখানে খুঁজে পেয়েছি

for f in /abcd/xyz* do
   [ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done

14
এছাড়াও -ot"এর চেয়ে বয়স্ক"।
ডেনিস উইলিয়ামসন

1
আমি মনে করি আমি এটি নিয়ে একটি সমস্যা নিয়ে এসেছি। একই পরিবর্তন সময়ের সাথে সেকেন্ডে নেমে আসা ফাইলগুলির জন্য, এই পরীক্ষাগুলির দ্বারা তারা "একই" বয়স; -আর-না উভয়ই একই ফল দেয় (মিথ্যা)। আমার ব্যবহারের ক্ষেত্রে আমি অন্যদের আউটপুট পড়ার জন্য একটি প্রোগ্রাম পেয়েছি এবং আমার এটি নিশ্চিত করা দরকার যে তারা সঠিক ক্রমে চলেছে। এই ক্ষেত্রে ন্যানোসেকেন্ডগুলি তুলনা করা প্রয়োজন বলে মনে হচ্ছে।
sjmc


7

এটি করার আরেকটি উপায়:

find -name file2 -newer file1

যদি ফাইল 2 এর বয়স বেশি হয় বা ফাইল বয়স 1 এর সমান হয় তবে তা বাতিল হয়ে যাবে। এটি যদি নতুন হয় তবে এটি ফাইলের নাম (এবং ডিরেক্টরি) ফিরিয়ে দেবে।

সচেতন হন যে ফাইলগুলি কখন তৈরি হয়েছিল লিনাক্স ট্র্যাক করে না। এই পরীক্ষাগুলি সাম্প্রতিকতম পরিবর্তনের তারিখ এবং সময়গুলির জন্য হবে time


2
লিনাক্স তৈরির সময় ট্র্যাক করে রাখে: একে সিটিটাইম বলে। এটি সর্বশেষ অ্যাক্সেসের সময়টিকেও ট্র্যাক করে রাখে: এক সময়। এটি কেবলমাত্র এমটাইম ব্যবহার করে কারণ এটি সর্বশেষ কার্যকর সময়, যা সবচেয়ে কার্যকর।
করুজ

2
@ করুস: ctimeতৈরির সময় নয়। এটি ইনোড পরিবর্তনের সময় এবং যখন ফাইলের বৈশিষ্ট্য যেমন মালিক বা অনুমতি বা পরিবর্তিত হয় বা আপনি যখন ফাইলটি পরিবর্তন করেন তখন আপডেট হয়। কিছু ফাইল সিস্টেম জন্মের সময় সমর্থন করে, তবে কার্নেলটি দেয় না। স্ট্যাটাস খালি জন্মের সময় দেখায়। Unix.stackexchange.com/a/91200 দেখুন যে ওএস এক্স জন্মের সময়কে সমর্থন করেstat -f %SB filename
ডেনিস উইলিয়ামসন

debugfsলিনাক্সে সৃষ্টি (জন্ম) সময় দেখতে কীভাবে ব্যবহার করতে হয় সে সম্পর্কে htrp: //unix.stackexchange.com/a/50184 দেখুন।
ডেনিস উইলিয়ামসন

2

আপনি যদি আরও বিশদ তথ্য চান তবে আপনি statকমান্ডটি ব্যবহার করতে পারেন

<tbielawa>@(fridge)[~/SuperUser] 03:15:10
$ touch firstFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:24
$ touch secondFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:45
$ stat firstFile 
  File: `firstFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151528      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:24.938721003 -0400
Modify: 2010-09-14 03:15:24.938721003 -0400
Change: 2010-09-14 03:15:24.938721003 -0400
<tbielawa>@(fridge)[~/SuperUser] 03:15:48
$ stat secondFile 
  File: `secondFile'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 151529      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/tbielawa)   Gid: (  500/tbielawa)
Access: 2010-09-14 03:15:45.074722792 -0400
Modify: 2010-09-14 03:15:45.074722792 -0400
Change: 2010-09-14 03:15:45.074722792 -0400

2
echo $(($(date -r file1 +%s)-$(date -r file2 +%s)))
2208

ফলাফলটি যদি 0 হয় তবে প্রথম ফাইলটি আরও নতুন। (সর্বশেষ পরিবর্তনের শর্তাবলী আরও নতুন, তৈরির সময় নয়, যা লিনাক্সে সঞ্চিত)।


- এটি সাধারণত ভাল তবে এটি একটি দরকারী পোস্ট ...
বুভিন জে

0

এই লিঙ্ক অনুসারে, ইউনিক্স তৈরির তারিখ সংরক্ষণ করে না। http://www.issociate.de/board/post/302628/How_to_check_file_creation_date.html

কিন্তু সর্বশেষ অ্যাক্সেস সঞ্চয় করে না।

শেষ অ্যাক্সেসের জন্য

 ls -t  # displays in order of date. So the first one is the 

ls প্রতিটি ফাইলকে একটি নতুন লাইনে প্রদর্শন করে।

সুতরাং ls -t সর্বশেষ ফাইলটি প্রথম লাইনে প্রদর্শন করে ইত্যাদি etc.

  • আপনি প্রথম লাইনটি বেছে নিতে নিজেকে ব্যবহার করতে পারেন।
  • আপনি প্রথম লাইনটি বেছে নেওয়ার জন্য সেড ব্যবহার করতে পারেন।

    ls -t php.exe php.ini | sed -n '1p' php.ini

কাজ করতে পারে -lt যদিও আপনি দেখতে পাবেন যে আপনি যদি কোন ফাইল নির্দিষ্ট না .. এবং এটি ডিরেক্টরির .. তারপর, এটা প্রথম লাইন মোট, দেয় তাই তোমার মত দ্বিতীয় লাইন বাছাই$ls -lt | sed -n '2p'

একটি ভাল হবে

ls -t | head -n 1

অথবা

ls -lt | head   

প্রথম ফাইলটি প্রথমে সংশোধিত প্রথমে 10 টি লাইন প্রদর্শন করে এবং আপনি এটি দেখতে পারেন


-tপরিবর্তন সময়; -uঅ্যাক্সেসের সময়
ডেনিস উইলিয়ামসন

থ্যাঙ্কস .. আমি ভাবছিলাম - আপনি ... পার্থক্য সম্পর্কে .. এবং হ্যাঁ আপনার পরামর্শ অনুসারে .. -আপনি সময় অনুযায়ী আদেশ করেছেন .. যেমন মানুষের এটি আছে। তারিখ অনুসারে এটি অর্ডার বলার চেয়ে ভাল।
বারলপ

যদিও সম্ভবত তারিখ / সময় দ্বারা আদেশ দেওয়া হিসাবে ভাল না ;-)
বারলোপ

0

এখানে একটি ছোট স্ক্রিপ্ট, আমি করেছি:

mtf0=`stat -c %Y file0`    
mtf1=`stat -c %Y file1`    
dt=$(( mtf1 - mtf0 ))    
[[ $dt -gt 0 ]] && echo "File F1 is newer than file F0 "

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