উত্তর:
একটি সমাধান যা ফাইলের মধ্যে ফাঁকা জায়গা ফাইলগুলির জন্য নিরাপদ। স্ট্রিংগুলি দিয়ে সমাপ্ত 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
সেগুলি সরিয়ে দেয়।
xargs
? অন্যান্য উত্তর, বংশীধ্বনিতুল্য ls
মধ্যে head
বা tail
, স্পেস দিয়ে ফাইলের নামের হ্যান্ডেল, এবং আপনার xargs
সমাধান নতুন লাইন দিয়ে ফাইলের নামের হ্যান্ডেল নেই।
লিনাক্স কোনও ফাইলের জন্মের জন্য টাইমস্ট্যাম্প সংরক্ষণ করে না, তবে ডিরেক্টরি তৈরির পর থেকে যদি অন্য কোনও ফাইল ডিরেক্টরিতে পরিবর্তন না করা হয় তবে আপনি ফাইলগুলি তাদের পরিবর্তনের সময় অনুসারে বাছাই করতে পারেন এবং প্রথমটি ফিরে আসতে পারেন।
ls -at | head -1
-1
; ls
আউটপুট পুনঃনির্দেশিত হলে স্বয়ংক্রিয়ভাবে প্রতি লাইন মোডে একটি ফাইলে যায়। (২) আপনার বলার দরকার নেই -a
, যদি পিরিয়ডের সাথে ফাইলটির নাম শুরু হয়।
-a
হতে পারে ..
বা .
যা নির্দিষ্ট স্ক্রিপ্টগুলির জন্য সমস্যা হতে পারে।
ls -A
শো ডট ফাইলগুলি বাদ রয়েছে ..
এবং.
.
এবং ..
। (আবার, যেহেতু প্রশ্নটি "শেষবারের ফাইল " বলেছে তাই সঠিক উত্তর হতে পারে ls -atl | grep "^-" | head -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, নিশ্চিত নয়) ফাইল সিস্টেমে কাজ করবে।
এটি কোনও ফাইলের নাম, স্পেস এবং নিউলাইন ইত্যাদির সাথে ডিল করতে পারে কোনও সমস্যা নয়।
ক্লাসিক ইউনিক্স ফাইল সিস্টেমগুলি ফাইল তৈরির সময় সংরক্ষণ করে না। ক্লাসিক ফাইল সিস্টেমে আপনি যে নিকটস্থ হন সেটি হ'ল ইনোড তৈরির সময়। বর্তমান ডিরেক্টরিতে যখন ফাইলটি তৈরি করা হয় এটি নয়, যখন এটি ফাইল সিস্টেমে তৈরি করা হয়েছিল। যদি এটি সরে যায়, তবে ইনোড সরানো হবে তবে সৃষ্টির সময় একই থাকবে। আপনি যদি ফাইল সিস্টেমগুলি জুড়ে "সরান", তবে এটি সত্যই একটি অনুলিপি + আরএম এবং নতুন ফাইল সিস্টেমে ইনড তৈরি করা হবে। এটি আপনি যা চান তা হতে পারে বা নাও পারে।
কমান্ডটি: ls -1c | head -1
সর্বশেষতম ইনোড তৈরির সময়টি খুঁজে পাবে।
ls –c
দেখায় যা পরিবর্তনের সময়ের মতো তবে আরও খারাপ (আরও উদ্বায়ী)। (এবং আমার অন্যান্য মন্তব্য দেখুন ।)ls -1