मेरी सबसे छोटी विधि 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'
यदि आपके पास उस सर्वर तक एसएसएच पहुंच है, तो बेहतर सुसज्जित मशीन पर sshfs पर निर्देशिका माउंट करें :
mkdir mnt
sshfs server:/path/to/directory mnt
zsh -c 'cd mnt && print -rl **/*(.Om)'
fusermount -u mnt
केवल POSIX टूल के साथ, यह बहुत अधिक जटिल है, क्योंकि फ़ाइल के संशोधन समय को खोजने का कोई अच्छा तरीका नहीं है। फ़ाइल के समय को पुनर्प्राप्त करने का एकमात्र मानक तरीका है 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