মনে হচ্ছে ls
পুনরাবৃত্তি কল করার সময় ফাইলগুলি সঠিকভাবে বাছাই করে না:
ls -altR . | head -n 3
আমি কীভাবে একটি ডিরেক্টরিতে (সাব-ডিরেক্টরি সহ) সর্বাধিক সংশোধিত ফাইলটি সন্ধান করতে পারি?
মনে হচ্ছে ls
পুনরাবৃত্তি কল করার সময় ফাইলগুলি সঠিকভাবে বাছাই করে না:
ls -altR . | head -n 3
আমি কীভাবে একটি ডিরেক্টরিতে (সাব-ডিরেক্টরি সহ) সর্বাধিক সংশোধিত ফাইলটি সন্ধান করতে পারি?
উত্তর:
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "
বিশাল গাছের জন্য, sort
সমস্ত কিছু স্মৃতিতে রাখা শক্ত হয়ে উঠতে পারে ।
%T@
আপনাকে ইউনিক্স টাইমস্ট্যাম্পের মতো পরিবর্তনের সময় দেয়, sort -n
সংখ্যা অনুসারে বাছাই করে, tail -1
শেষ লাইনটি (সর্বোচ্চ টাইমস্ট্যাম্প) cut -f2 -d" "
নেয়, আউটপুট থেকে প্রথম ক্ষেত্রটি (টাইমস্ট্যাম্প) কেটে দেয়।
সম্পাদনা: কেবল -printf
জিএনইউ-তে যেমন রয়েছে, তেমনই আজ্রিয়ালের ব্যবহারও stat -c
খুব বেশি। যদিও বিএসডিতে এটি করা সম্ভব, বিন্যাসের বিকল্পগুলি ভিন্ন ( -f "%m %N"
এটি মনে হবে)
আমি বহুবচনের অংশটি মিস করেছি; আপনি আরো তারপর চান তাহলে সর্বশেষ ফাইল, শুধু লেজ যুক্তি আচমকা।
sort -rn | head -3
পরিবর্তে ব্যবহারটি স্যুইচ করতে পারেন sort -n | tail -3
। একটি সংস্করণ ফাইলগুলি পুরানো থেকে সর্বাধিক নতুনকে দেয়, অন্যটি সর্বশেষ থেকে প্রাচীনতম পর্যন্ত to
sort
অস্থায়ী ফাইল (ইন /tmp
) তৈরি করবে , তাই আমি এটিকে উদ্বেগ বলে মনে করি না।
-printf '%T@ %Tb %Td %TY %p\n'
আপনাকে একটি তারিখ স্ট্যাম্প দেবে (যদি প্রয়োজন হয়) (অনুরূপ ls
)
find . -type f -printf '%TF %TT %p\n' | sort | tail -1
@ প্লুন্ড্রার উত্তর অনুসরণ করে , এখানে বিএসডি এবং ওএস এক্স সংস্করণ রয়েছে:
find . -type f -print0 | xargs -0 stat -f "%m %N" |
sort -rn | head -1 | cut -f2- -d" "
find
সমর্থন +
করে \;
? কারণ এটি -print0 | xargs -0
পাইপ ছাড়াই একই জিনিসটি (একাধিক ফাইলকে প্যারামিটার হিসাবে পাস করা) করে ।
head -1
করতেhead -5
ফলাফলগুলি বাছাই করার পরিবর্তে এবং কেবলমাত্র সর্বশেষ পরিবর্তনকৃত পরিবর্তনগুলি রেখে, আপনি কেবলমাত্র সর্বোচ্চ পরিবর্তনের সময় (ইউনিক্স সময়ে) মুদ্রণ করতে বিশ্রী ব্যবহার করতে পারেন:
find . -type f -printf "%T@\0%p\0" | awk '
{
if ($0>max) {
max=$0;
getline mostrecent
} else
getline
}
END{print mostrecent}' RS='\0'
ফাইলগুলির সংখ্যা যথেষ্ট পরিমাণে বড় হলে আপনার সমস্যা সমাধানের এটি দ্রুততর হওয়া উচিত।
আমি নুল অক্ষর ব্যবহার করেছি (অর্থাত '\ 0') কারণ, তাত্ত্বিকভাবে কোনও ফাইলের নামের মধ্যে কোনও অক্ষর থাকতে পারে (স্থান এবং নিউলাইন সহ) তবে তা।
আপনার সিস্টেমে এ জাতীয় প্যাথলজিকাল ফাইল নাম না থাকলে আপনি নিউলাইন চরিত্রটিও ব্যবহার করতে পারেন:
find . -type f -printf "%T@\n%p\n" | awk '
{
if ($0>max) {
max=$0;
getline mostrecent
} else
getline
}
END{print mostrecent}' RS='\n'
তদ্ব্যতীত, এটি মওকটিতেও কাজ করে।
mawk
ডেবিয়ান স্ট্যান্ডার্ড বিকল্পের সাথে কাজ করে না ।
আমি কষ্ট সোলারিস 10 বছরের কম গত পরিবর্তিত ফাইল খুঁজতে ছিল find
নেই printf
বিকল্প এবং stat
পাওয়া যায় না। আমি নিম্নলিখিত সমাধানটি আবিষ্কার করেছি যা আমার পক্ষে ভাল কাজ করে:
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7 }' | sort | tail -1
ফাইলের নামটি দেখতেও ব্যবহার করুন
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7," ",$9 }' | sort | tail -1
ব্যাখ্যা
find . -type f
সমস্ত ফাইল সন্ধান করে এবং তালিকাবদ্ধ করেsed 's/.*/"&"/'
হোয়াইটস্পেসগুলি পরিচালনা করতে উদ্ধৃতিগুলিতে পথের নামটি মোড়ানোxargs ls -E
উদ্ধৃত পথটিতে প্রেরণ করে ls
, -E
বিকল্পটি নিশ্চিত করে যে একটি পূর্ণ টাইমস্ট্যাম্প ( বছর-মাস-দিন-ঘন্টা-মিনিট-সেকেন্ড-ন্যানোসেকেন্ডস বিন্যাস ) ফিরে এসেছেawk '{ print $6," ",$7 }'
কেবল তারিখ এবং সময় আহরণ করেawk '{ print $6," ",$7," ",$9 }'
তারিখ, সময় এবং ফাইলের নাম আহরণ করেsort
তারিখ অনুসারে বাছাই করা ফাইলগুলি ফেরত দেয়tail -1
শুধুমাত্র শেষ পরিবর্তিত ফাইল ফেরত দেয়সাব-ডাইরেক্টরি দিয়েও এটি দুর্দান্ত কাজ করছে বলে মনে হচ্ছে:
find . -type f | xargs ls -ltr | tail -n 1
খুব বেশি ফাইলের ক্ষেত্রে, অনুসন্ধানটি পরিমার্জন করুন।
-l
বিকল্প ls
অপ্রয়োজনীয় বলে মনে হয়। শুধু -tr
যথেষ্ট বলে মনে হয়।
find . -type f -print0 | xargs -0 ls -ltr | tail -n 1
মানব পাঠযোগ্য টাইমস্ট্যাম্প সহ সর্বশেষতম ফাইলটি দেখায়:
find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n1
ফলাফলটি এরকম দেখাচ্ছে:
2015-10-06 11:30: +0200 ./foo/bar.txt
আরও ফাইলগুলি দেখানোর জন্য -n1
, একটি উচ্চতর সংখ্যার সাথে প্রতিস্থাপন করুন
আমি সর্বদা অনুরূপ কিছু ব্যবহার করি, পাশাপাশি সর্বাধিক সংশোধিত ফাইলগুলির শীর্ষ-কে তালিকা। বড় ডিরেক্টরি গাছের জন্য, বাছাই এড়াতে এটি আরও দ্রুত হতে পারে । সর্বাধিক সংশোধিত ফাইলের মধ্যে শীর্ষস্থানীয় -১ এর ক্ষেত্রে:
find . -type f -printf '%T@ %p\n' | perl -ne '@a=split(/\s+/, $_, 2); ($t,$f)=@a if $a[0]>$t; print $f if eof()'
১.7 মিলিয়ন ফাইল সম্বলিত ডিরেক্টরিতে, আমি সর্বাধিক সাম্প্রতিক একটিটি 3.4 এস মধ্যে পেয়েছি, বাছাইয়ের সাহায্যে 25.5 এর সমাধানের তুলনায় 7.5x গতি।
lastfile
করতে পারেন (যেমন :) এবং ফলাফলের সাথে আপনি যা পছন্দ করতে পারেন যেমন ls -l $(lastfile .)
, বা open $(lastfile .)
(একটি ম্যাকে) ইত্যাদি
উবুন্টু ১৩-তে, নিম্নলিখিতটি এটি করে, সম্ভবত একটি বাচ্চা দ্রুততর হয়, কারণ এটি বাছাইটি উল্টে দেয় এবং কাজটি হ্রাস করে 'লেজ' এর পরিবর্তে 'মাথা' ব্যবহার করে। একটি গাছে 11 টি নতুন ফাইল দেখানোর জন্য:
অনুসন্ধান . -প্রকারের এফ-প্রিন্টফ '% টি @% পি \ n' | সাজানো -n -r | মাথা -11 | কাট -f2- -d "" | সেড-এর, ^। /, '| xargs ls -U -l
এটি পুনরায় বাছাই ছাড়াই একটি সম্পূর্ণ ls তালিকা দেয় এবং বিরক্তিকর './' কে বাদ দেয় যা প্রতিটি ফাইলের নাম 'অনুসন্ধান' করে।
বা, বাশ ফাংশন হিসাবে:
treecent () {
local numl
if [[ 0 -eq $# ]] ; then
numl=11 # Or whatever default you want.
else
numl=$1
fi
find . -type f -printf '%T@ %p\n' | sort -n -r | head -${numl} | cut -f2- -d" " | sed -e 's,^\./,,' | xargs ls -U -l
}
তবুও, বেশিরভাগ কাজ প্লুন্ড্রার মূল সমাধান দ্বারা করা হয়েছিল। ধন্যবাদ প্লুন্ড্রা।
আমি একই সমস্যা সম্মুখীন। আমার সর্বাধিক সাম্প্রতিক ফাইল পুনরাবৃত্তভাবে সন্ধান করা দরকার। খুঁজে পেতে প্রায় 50 মিনিট সময় নেয়।
এটি দ্রুত করার জন্য এখানে একটি ছোট স্ক্রিপ্ট রয়েছে:
#!/bin/sh
CURRENT_DIR='.'
zob () {
FILE=$(ls -Art1 ${CURRENT_DIR} | tail -n 1)
if [ ! -f ${FILE} ]; then
CURRENT_DIR="${CURRENT_DIR}/${FILE}"
zob
fi
echo $FILE
exit
}
zob
এটি একটি পুনরাবৃত্ত ফাংশন যারা কোনও ডিরেক্টরিতে সর্বাধিক সংশোধিত আইটেমটি পায়। যদি এই আইটেমটি ডিরেক্টরি হয় তবে ফাংশনটিকে পুনরাবৃত্তভাবে বলা হয় এবং এই ডিরেক্টরিতে অনুসন্ধান করা ইত্যাদি is
আমি নিম্নলিখিতটি আরও ছোট এবং আরও ব্যাখ্যাযোগ্য আউটপুট সহ দেখতে পাচ্ছি:
find . -type f -printf '%TF %TT %p\n' | sort | tail -1
মানকযুক্ত আইএসওর ফর্ম্যাট তারিখের নির্দিষ্ট দৈর্ঘ্য দেওয়া, অভিধানিক বাছাই ঠিক আছে এবং আমাদের -n
সাজানোর বিকল্পের দরকার নেই ।
আপনি যদি আবার টাইমস্ট্যাম্পগুলি সরাতে চান তবে আপনি ব্যবহার করতে পারেন:
find . -type f -printf '%TFT%TT %p\n' | sort | tail -1 | cut -f2- -d' '
stat
প্রতিটি ফাইলটিতে স্বতন্ত্রভাবে চলতে থাকলে ধীরে ধীরে xargs
জিনিসগুলিকে কিছুটা গতি বাড়ানোর জন্য আপনি ব্যবহার করতে পারেন :
find . -type f -print0 | xargs -0 stat -f "%m %N" | sort -n | tail -1 | cut -f2- -d" "
এটি ক্রমবর্ধমানভাবে বর্তমান ডিরেক্টরিতে সমস্ত ডিরেক্টরি পরিবর্তনের সময়কে প্রতিটি ডিরেক্টরিতে নতুন ফাইলে পরিবর্তন করে:
for dir in */; do find $dir -type f -printf '%T@ "%p"\n' | sort -n | tail -1 | cut -f2- -d" " | xargs -I {} touch -r {} $dir; done
এই সাধারণ ক্লিপটিও কাজ করবে:
ls -1t | head -1
আপনি তালিকা তৈরি করতে চান এমন ফাইলের সংখ্যায় আপনি -1 পরিবর্তন করতে পারেন
আমি উপরের কমান্ডটি দরকারী হিসাবে পেয়েছি, তবে আমার ক্ষেত্রে আমার ফাইলের তারিখ এবং সময়ও দেখতে হবে এবং বেশ কয়েকটি ফাইলের নাম ছিল যা আমার কাছে ফাঁকা আছে with এখানে আমার কাজের সমাধান।
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " | sed 's/.*/"&"/' | xargs ls -l
$ find . -type f -not -path '*/\.*' -printf '%TY.%Tm.%Td %THh%TM %Ta %p\n' |sort -nr |head -n 10
ফাইলের নামগুলিতে স্পেসগুলি ভালভাবে পরিচালনা করে - এগুলি ব্যবহার করা উচিত নয়!
2017.01.25 18h23 Wed ./indenting/Shifting blocks visually.mht
2016.12.11 12h33 Sun ./tabs/Converting tabs to spaces.mht
2016.12.02 01h46 Fri ./advocacy/2016.Vim or Emacs - Which text editor do you prefer?.mht
2016.11.09 17h05 Wed ./Word count - Vim Tips Wiki.mht
find
লিঙ্ক অনুসরণ আরও গৌরব।
/ টার্গেট_ডাইরেক্টরি এবং এর সমস্ত সাব-ডিরেক্টরিতে ফাইলগুলি অনুসন্ধান করতে, যেগুলি গত minutes০ মিনিটে পরিবর্তিত হয়েছে:
$ find /target_directory -type f -mmin -60
আপডেট সময়ের বিপরীতে ক্রম অনুসারে সর্বাধিক সংশোধিত ফাইলগুলি সন্ধান করতে (অর্থাত্ সর্বশেষে আপডেট হওয়া ফাইলগুলি প্রথমে):
$ find /etc -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
আমি এটি পছন্দ করি, এটি সংক্ষিপ্ত:
find . -type f -print0|xargs -0 ls -drt|tail -n 1
আমি এই প্রশ্নের জন্য একটি পাইপি / গিথুব প্যাকেজ লিখেছিলাম কারণ আমারও সমাধানের প্রয়োজন ছিল।
https://github.com/bucknerns/logtail
ইনস্টল করুন:
pip install logtail
ব্যবহার: লেজ ফাইল পরিবর্তন করা হয়েছে
logtail <log dir> [<glob match: default=*.log>]
ব্যবহার 2: সম্পাদকের সর্বশেষ পরিবর্তিত ফাইল খুলবে
editlatest <log dir> [<glob match: default=*.log>]