আমার সংক্ষিপ্ততম পদ্ধতিটি zsh ব্যবহার করে:
print -rl -- **/*(.Om)
( D
আপনি যদি লুকানো ফাইলগুলি বা গোপন ডিরেক্টরিতে ফাইলগুলি তালিকাভুক্ত করতে চান তবে গ্লোব বাছাইকারীদের যুক্ত করুন )।
আপনার যদি জিএনইউ খুঁজে পাওয়া যায় তবে এটিকে ফাইল পরিবর্তনের সময় মুদ্রণ করুন এবং এর অনুসারে বাছাই করুন। আমি ধরে নিই যে ফাইলের নামে কোনও নতুন লাইন নেই।
find . -type f -printf '%T@ %p\n' | sort -k 1 -n | sed 's/^[^ ]* //'
আপনার যদি পার্ল থাকে (আবার, ফাইলের নামগুলিতে কোনও নতুন লাইন ধরে না রেখে):
find . -type f -print |
perl -l -ne '
$_{$_} = -M; # store file age (mtime - now)
END {
$,="\n";
print sort {$_{$b} <=> $_{$a}} keys %_; # print by decreasing age
}'
যদি পাইথন থাকে (আবার, ফাইলের নামে কোনও নতুন লাইন ধরে নিই):
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
আপনার যদি সেই সার্ভারটিতে এসএসএইচ অ্যাক্সেস থাকে তবে আরও ভাল-সজ্জিত মেশিনে এসএসএফএসের মাধ্যমে ডিরেক্টরিটি মাউন্ট করুন :
mkdir mnt
sshfs server:/path/to/directory mnt
zsh -c 'cd mnt && print -rl **/*(.Om)'
fusermount -u mnt
কেবল পসিক্স সরঞ্জামের সাহায্যে এটি আরও জটিল, কারণ কোনও ফাইলের পরিবর্তনের সময়টি খুঁজে পাওয়ার কোনও ভাল উপায় নেই। কোনও ফাইলের সময় পুনরুদ্ধার করার একমাত্র স্ট্যান্ডার্ড উপায় ls
এবং আউটপুট ফর্ম্যাটটি লোকেল-নির্ভর এবং পার্স করা শক্ত।
যদি আপনি ফাইলগুলিতে লিখতে পারেন, এবং আপনি কেবল নিয়মিত ফাইলগুলি সম্পর্কে যত্নশীল হন এবং ফাইলের নামগুলিতে কোনও নতুন লাইন থাকে না, এখানে একটি ভয়াবহ ক্লডেজ রয়েছে: একটি ডিরেক্টরিতে সমস্ত ফাইলের জন্য হার্ড লিঙ্ক তৈরি করুন, এবং সংশোধন করার সময় অনুসারে সেগুলি সাজান।
set -ef # disable globbing
IFS='
' # split $(foo) only at newlines
set -- $(find . -type f) # set positional arguments to the file names
mkdir links.tmp
cd links.tmp
i=0 list=
for f; do # hard link the files to links.tmp/0, links.tmp/1, …
ln "../$f" $i
i=$(($i+1))
done
set +f
for f in $(ls -t [0-9]*); do # for each file, in reverse mtime order:
eval 'list="${'$i'} # prepend the file name to $list
$list"'
done
printf %s "$list" # print the output
rm -f [0-9]* # clean up
cd ..
rmdir links.tmp