শেষ বারের ফাইল খোলা হয়েছে


94

গতবার ফাইলটি যখন খোলা হয়েছিল তখন সময় পাওয়া এবং সেই সময়ের মধ্যে সমস্ত ফাইলকে একটি ডিরেক্টরিতে বাছাই করা সম্ভব?

উত্তর:


172

এটি "খোলার" দ্বারা আপনি ঠিক কী বোঝাতে চান তার উপর নির্ভর করে, তবে সাধারণভাবে, হ্যাঁ। সাধারণত তিনটি টাইমস্ট্যাম্প রেকর্ড করা হয়:

  • mtime- ফাইলের বিষয়বস্তু পরিবর্তিত হলে আপডেট। এটি বেশিরভাগ ক্ষেত্রে "ডিফল্ট" ফাইল সময়।
  • ctime- ফাইল বা এর মেটাডেটা (মালিক, অনুমতি) পরিবর্তিত হলে আপডেট হয়
  • atime - ফাইলটি পড়ার পরে আপডেট করা হয়েছে

সুতরাং, সাধারণত, আপনি যা দেখতে চান তা হ'ল atimeএকটি ফাইল। আপনি এটি সাথে statবা সাথে পেতে পারেন ls। আপনি এটি করতে ব্যবহার করতে পারেন ls -lu, যদিও আমি ব্যবহার করতে পছন্দ করি ls -l --time=atime(যা প্রায় সমস্ত আধুনিক লিনাক্স বিতরণে সমর্থন করা উচিত) কারণ আমি এটি প্রায়শই ব্যবহার করি না এবং যখন করি তখন আমি এটি আরও ভালভাবে মনে করতে পারি। এবং সময় অনুসারে বাছাই করতে , -tপতাকাটিকে ls এ যুক্ত করুন। সুতরাং আপনি সেখানে যান।

যদিও একটি বড় সাবধানবাণী রয়েছে। প্রতিবার কোনও ফাইল পড়ার সময়টি আপডেট করার ফলে সমস্ত কিছু ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে যায় I সুতরাং, বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনগুলি এখন noatimeফাইল সিস্টেম মাউন্ট অপশনে ডিফল্ট হয়ে যায় , যা মূলত সময়কে মেরে ফেলেছে বা অন্যথায় relatime, যা কেবল একবারে সীমা অতিক্রম করার পরে আপডেট হয় (সাধারণত প্রতিদিন একবার) বা যদি ফাইলটি পূর্ববর্তী পাঠের পরে পরিবর্তিত হয়েছিল। mountকমান্ডটি চালিয়ে এই বিকল্পগুলি সক্রিয় রয়েছে কিনা তা আপনি আবিষ্কার করতে পারেন ।

এছাড়াও, নোট করুন যে অ্যাক্সেসের সময়গুলি ইনোড দ্বারা হয়, ফাইলের নাম দ্বারা নয়, সুতরাং আপনার যদি হার্ডলিঙ্ক থাকে তবে একটির কাছ থেকে পড়া একই ফাইলটিকে উল্লেখ করা সমস্ত নাম আপডেট করবে।

এবং, সচেতন হন যে "সৃষ্টি" নয়; ইউনিক্স / লিনাক্স ফাইল সিস্টেমগুলি দ্বারা সৃষ্টিটি ট্র্যাক করা হয়নি, যা অদ্ভুত বলে মনে হয় তবে এটি প্রকৃত অর্থে বোঝায় কারণ ফাইল সিস্টেমটি এটি আসল কিনা তা জানার কোনও উপায় নেই - সম্ভবত চল্লিশ বছর আগে ফাইলটি তৈরি হয়েছিল এবং এখানে অনুলিপি করা হয়েছিল। এবং, প্রকৃতপক্ষে, অনেক ফাইল সম্পাদক মূলটির অনুলিপি তৈরি করে কাজ করে work আপনার যদি সেই তথ্য দরকার হয় তবে এর মতো সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করা ভাল git


9
আমি সিটিটাইমকে "ক্রিয়েশন টাইম" না বলার জন্য আমি +1 এরও বেশি দিতে পারতাম।
jsbillings

2
মাউন্ট র manpage মতে, relatime দৈনন্দিন সীমা কিছুই করার আছে, কিন্তু শুধুমাত্র atime এ দেখায় আপেক্ষিক র দ্বারা mtime এবং ctime করতে। যদি টাইম এমটাইম বা সিটাইমের চেয়ে পুরানো হয়, এটাইম আপডেট হয় is যদি সময়কাল উভয়ের চেয়ে নতুন হয় তবে তা একা থাকে। এটির উদ্দেশ্য হ'ল আটাইম এবং এমটাইম / সিটিএমের মধ্যে সম্পর্ক রক্ষা করা , যেহেতু কিছু অ্যাপ্লিকেশন সেই তথ্যটি মেটের মতো ব্যবহার করে এটি সর্বশেষ আপডেট হওয়ার পরে এটি আপনার মেলবক্সটি পড়েছে কিনা তা দেখার জন্য।
jw013

1
@ jw013 ২.6.৩০ কার্নেল থেকে এটি ঘটেছে। এটি সত্য যে কিছু পুরানো বিতরণে এই আচরণ নাও থাকতে পারে। (তবে ফেডোরার মতো বিতরণের জন্য, আমি যখন তিন বছর আগে এই উত্তরের মূল সংস্করণটি লিখেছিলাম তখনও এটি সত্য হয়েছিল)) একটি আপডেট হওয়া mountম্যানপেজটি দেখুন।
mattdm

1
lsএকটি সংজ্ঞায়িত নির্ভুলতার জন্য সময়কে ডিফল্টভাবে সংক্ষিপ্ত করে তোলে। সময়টি সম্পূর্ণ নির্ভুলতার সাথে দেখতে ব্যবহার করতে পারেন --full-time
jlh

19

ls -ltu অ্যাক্সেসের সময় অনুসারে বাছাই করা সমস্ত ফাইলের তালিকা দিন।

থেকে man ls:

-u     with -lt: sort by, and show, access time with -l: show access
       time and sort by name otherwise: sort by access time

4

findকমান্ড এই জন্য সবচেয়ে ভাল। দেখুন -ctime, -mtimeএবং -atimeঅপশন


3

যদি আপনার তালিকাটি মানুষের ব্যবহারের জন্য lsহয় তবে একটি তারিখ বাছাই পতাকা -tuব্যবহারের জন্য (অ্যাক্সেসের জন্য (পড়ার) সময়, কেবল -tপরিবর্তন (লেখার জন্য) সময় বা -tcইনোড পরিবর্তনের সময় ব্যবহার করুন। দেখুন mattdm এর উত্তর (বিশেষ করে সতর্কীকরণ সংক্রান্ত আরো তথ্যের জন্য -aএবং সংজ্ঞা -c)।

এটি যদি প্রোগ্রাম ব্যবহারের জন্য হয় তবে এর আউটপুট পার্স lsকরা সমস্যাযুক্ত । আপনার শেলটি যদি zsh হয় তবে আপনার আর প্রয়োজন নেই ls: অ্যাক্সেস ( *(Oa)), ইনোড পরিবর্তন ( *(Oc)) বা পরিবর্তন ( *(Om)) সময় বাড়িয়ে ম্যাচগুলিকে বাছাই করতে zsh এর গ্লোবিং বাছাইপর্ব রয়েছে । একটি ছোট হাত oবয়সের দ্বারা বাছাই।

act_on_files_by_date *(Om)

অন্যথায়, আপনি যদি জানেন যে ফাইলের নামগুলিতে কোনও নতুন লাইন বা প্রিন্টযোগ্য অক্ষর নেই (বর্তমান লোকালে), তবে আপনি এর মতো কিছু করতে পারেন

ls -t | while read -r name; do act_on_one_file "$name"; done
ls -t | xargs -I {} act_on_one_file {}

আপনি যদি একবারে অনেকগুলি ফাইলে একটি কমান্ড চাওয়াতে চান তবে আপনার আরও সেটআপ প্রয়োজন। দ্রষ্টব্য যে act_on_files_by_date $(ls -t)ঠিক এর মতো কাজ করে না, কারণ ওয়াইল্ডকার্ড অক্ষর বা সাদা স্থান যুক্ত ফাইলের নামগুলি কমান্ড প্রতিস্থাপনের ফলে প্রসারিত হবে। নিম্নলিখিত ফাইলটি যতক্ষণ কাজ করে না যতক্ষণ না কোনও ফাইলনামে একটি নতুন লাইন বা কোনও মুদ্রণযোগ্য অক্ষর থাকে না:

IFS='
'
set -f
act_on_files_by_date $(ls -t)
set +f
unset IFS

আপনি যদি স্বেচ্ছাসেবী ফাইলের নামগুলি মোকাবেলা করতে চান তবে একটি স্ট্যান্ডার্ড শেলের চেয়ে বেশি শক্তিশালী সরঞ্জামগুলি অবলম্বন না করে আপনার খুব কঠিন সময় হবে: zsh, পারল, পাইথন…

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