লিনাক্স মেশিনে বর্তমান ডিরেক্টরিতে একটি সর্বশেষতম তৈরি ফাইলটি কীভাবে খুঁজে পাবেন?


5

লিনাক্স মেশিনে বর্তমান ডিরেক্টরিতে একটি সর্বশেষ নির্মিত ফাইলটি কীভাবে খুঁজে পাব?

দ্রষ্টব্য: আমি জানি না মাইটাইম।

উত্তর:


3

একটি সমাধান যা ফাইলের মধ্যে ফাঁকা জায়গা ফাইলগুলির জন্য নিরাপদ। স্ট্রিংগুলি দিয়ে সমাপ্ত 0হয় print0

$ touch "file with spaces"
$ find . -maxdepth 1 -type f   -print0 | xargs -0r ls -ltr  | tail -1
-rw-rw-r-- 1 jris  jris      0 jun  3 15:35 ./file with spaces

বা সম্ভবত সহজ:

ls -ltrp | grep -v / | tail -1

-p/ডিরেক্টরিতে একটি পিছনে যুক্ত করে এবং grepসেগুলি সরিয়ে দেয়।


এটি সর্বশেষ পরিবর্তিত ফাইল পান। এটি যদি সত্যিই তৈরির সময় হওয়া দরকার, সঞ্চিত ext4- এ
jris198944

4
আপনি এমনকি পরামর্শ দিচ্ছেন কেন xargs? অন্যান্য উত্তর, বংশীধ্বনিতুল্য lsমধ্যে headবা tail, স্পেস দিয়ে ফাইলের নামের হ্যান্ডেল, এবং আপনার xargsসমাধান নতুন লাইন দিয়ে ফাইলের নামের হ্যান্ডেল নেই।
স্কট

1

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

ls -at | head -1

(1) আপনাকে বলতে হবে না -1; lsআউটপুট পুনঃনির্দেশিত হলে স্বয়ংক্রিয়ভাবে প্রতি লাইন মোডে একটি ফাইলে যায়। (২) আপনার বলার দরকার নেই -a, যদি পিরিয়ডের সাথে ফাইলটির নাম শুরু হয়।
স্কট

1
ধন্যবাদ, পরিবর্তিত। যদিও, সতর্কতা অবলম্বন করুন যে -aহতে পারে ..বা .যা নির্দিষ্ট স্ক্রিপ্টগুলির জন্য সমস্যা হতে পারে।
ভোর্টিকো

1
তারপরে সেখানে ls -Aশো ডট ফাইলগুলি বাদ রয়েছে ..এবং.
পাবলো শরতকসাগা

@ পাবলো, @ ভার্টিকো: ভাল পয়েন্ট; ব্যবহারকারী সম্ভবত বাদ দিতে চান .এবং ..। (আবার, যেহেতু প্রশ্নটি "শেষবারের ফাইল " বলেছে তাই সঠিক উত্তর হতে পারে ls -atl | grep "^-" | head -1))
স্কট

কড়া কথায় বলতে গেলে, সৃষ্টির সময়টি নির্দিষ্ট ফাইল সিস্টেমগুলি সঞ্চয় করে তবে কার্নেল এপিআই এর জন্য কোনও কল সরবরাহ করে না।
টেরডন

1

আপনি একটি EXT ফাইলসিস্টেম-এর হয়ে থাকেন, তাহলে আপনি ব্যবহার করতে পারেন debugfsএকটি সৃষ্টির তারিখ পেতে inode । সুতরাং, আপনি বর্তমান ডিরেক্টরিতে প্রতিটি ফাইলের জন্য আইনডগুলি সংগ্রহ করতে পারেন এবং তারপরে তৈরির সময় অনুসারে বাছাই করতে পারেন:

#!/usr/bin/env bash

## This will hold the newest timestamp
newestT=0

## Get the partition we are running on
fs=$(df  --output=source "$@"  | tail -1); 

## Iterate through the files in the directory
## given as a target
for file in "$@"/*; do 
    ## Only process files
    if [ -f "$file" ]; then 
        ## Get this file's inode
        inode=$(ls -i "$file" | awk 'NR==1{print $1}'); 
        ## Get its creation time
        crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' $fs 2>/dev/null | grep -oP 'crtime.*-- \K.*'); 
        ## Convert it to a Unix timestamp
        timestamp=$(date -d "$crtime" +%s)
        ## Is this newer than the newest?
        if [[ $timestamp -gt $newestT ]]; then
            newestT=$timestamp;
            newest="$file";
        fi
    fi
done
## Print the newest file
echo "$newest"

উপরের স্ক্রিপ্টটি সংরক্ষণ করুন ~/bin/get_newest.sh, এটি কার্যকর ( chmod 744 get_newest.sh) তৈরি করুন এবং এটি চালান:

~/bin/get_newest.sh /target/directory

নোট

  • অন্যান্য উত্তরের মতো নয়, এইটি আসলে তার তৈরি তারিখের দিক দিয়ে সর্বাধিক নতুন ফাইলটি ফিরিয়ে দেবে , এটি সম্প্রতি সর্বাধিক সংশোধিত নয়।

  • এটি কেবল ext4 (সম্ভবত 3, নিশ্চিত নয়) ফাইল সিস্টেমে কাজ করবে।

  • এটি কোনও ফাইলের নাম, স্পেস এবং নিউলাইন ইত্যাদির সাথে ডিল করতে পারে কোনও সমস্যা নয়।


0

ক্লাসিক ইউনিক্স ফাইল সিস্টেমগুলি ফাইল তৈরির সময় সংরক্ষণ করে না। ক্লাসিক ফাইল সিস্টেমে আপনি যে নিকটস্থ হন সেটি হ'ল ইনোড তৈরির সময়। বর্তমান ডিরেক্টরিতে যখন ফাইলটি তৈরি করা হয় এটি নয়, যখন এটি ফাইল সিস্টেমে তৈরি করা হয়েছিল। যদি এটি সরে যায়, তবে ইনোড সরানো হবে তবে সৃষ্টির সময় একই থাকবে। আপনি যদি ফাইল সিস্টেমগুলি জুড়ে "সরান", তবে এটি সত্যই একটি অনুলিপি + আরএম এবং নতুন ফাইল সিস্টেমে ইনড তৈরি করা হবে। এটি আপনি যা চান তা হতে পারে বা নাও পারে।

কমান্ডটি: ls -1c | head -1সর্বশেষতম ইনোড তৈরির সময়টি খুঁজে পাবে।


2
না! ইনোড পরিবর্তনের সময়ls –c দেখায় যা পরিবর্তনের সময়ের মতো তবে আরও খারাপ (আরও উদ্বায়ী)। (এবং আমার অন্যান্য মন্তব্য দেখুন ।)ls -1
স্কট

আসলে, অনেক ফাইল সিস্টেম কি সৃষ্টি সময় দোকান (আমার উত্তর দেখুন) কিন্তু এটা এত অন্যান্য সরঞ্জাম প্রয়োজন হয় কার্নেল API অ্যাক্সেস দেয় না। যাই হোক না কেন, স্কট একেবারে ঠিক বলেছেন, এটি কেবল সম্প্রতি ফাইলটি প্রদর্শিত হচ্ছে যা খুব সম্প্রতি সংশোধিত হয়েছিল।
টেরডন

0
ls -ltrh 

এবং নীচে প্রদর্শিত শেষ ফাইলটি সর্বাধিক নতুন।


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