ডিরেক্টরিতে সর্বশেষ ফাইলটি কীভাবে "টেল" করতে হবে


20

শেলের মধ্যে, আমি কীভাবে tailএকটি ডিরেক্টরিতে সর্বশেষ ফাইল তৈরি করতে পারি ?


1
ক্লোজারে আসুন, প্রোগ্রামারদের লেজ লাগবে!
amit

কাছাকাছিটি কেবল সুপারইউজার বা সার্ভারফল্টে যাওয়ার জন্য। প্রশ্নটি সেখানে থাকবে এবং আরও আগ্রহী ব্যক্তিরা এটি খুঁজে পাবেন।
মুনমেন্ট

এখানে আসল সমস্যাটি হ'ল ডিরেক্টরিটিতে সর্বাধিক আপডেট হওয়া ফাইলটি খুঁজে পাওয়া এবং আমি বিশ্বাস করি যে ইতিমধ্যে এর জবাব দেওয়া হয়েছে (হয় এখানে বা সুপার ব্যবহারকারীতে, আমি মনে করতে পারি না)।
ডিএমকেকে

উত্তর:


24

Ls এর আউটপুটকে বিশ্লেষণ করবেন না ! Ls এর আউটপুট পার্সিং করা কঠিন এবং বিশ্বাসযোগ্য নয়

আপনার অবশ্যই এটি করতে হলে আমি সন্ধানটি ব্যবহার করার পরামর্শ দিই। মূলত আমি আপনাকে সমাধানটির সূচনা দেওয়ার জন্য এখানে একটি সাধারণ উদাহরণ রেখেছিলাম, তবে যেহেতু এই উত্তরটি কিছুটা জনপ্রিয় বলে মনে হচ্ছে আমি এই সংস্করণটি অনুলিপি করার সিদ্ধান্ত নিয়েছি যা অনুলিপি / আটকানো এবং সমস্ত ইনপুট সহ ব্যবহারের জন্য নিরাপদ provide আরামে বসে আছিস? আমরা একটি অনলাইনার দিয়ে শুরু করব যা আপনাকে বর্তমান ডিরেক্টরিতে সর্বশেষ ফাইল দেবে:

tail -- "$(find . -maxdepth 1 -type f -printf '%T@.%p\0' | sort -znr -t. -k1,2 | while IFS= read -r -d '' -r record ; do printf '%s' "$record" | cut -d. -f3- ; break ; done)"

এখন বেশ অননায়ক না, তাই না? এখানে এটি আবার শেল ফাংশন হিসাবে রয়েছে এবং সহজে পড়ার জন্য ফর্ম্যাট করা হয়েছে:

latest-file-in-directory () {
    find "${@:-.}" -maxdepth 1 -type f -printf '%T@.%p\0' | \
            sort -znr -t. -k1,2 | \
            while IFS= read -r -d '' -r record ; do
                    printf '%s' "$record" | cut -d. -f3-
                    break
            done
}

এবং এখন এটি অনলাইনার হিসাবে:

tail -- "$(latest-file-in-directory)"

যদি সমস্ত কিছু ব্যর্থ হয় তবে আপনি উপরের ফাংশনটি নিজের মধ্যে অন্তর্ভুক্ত করতে পারেন .bashrcএবং একটি ক্যাব্যাট দিয়ে সমস্যার সমাধানের বিষয়টি বিবেচনা করতে পারেন। আপনি যদি সবেমাত্র কাজটি করতে চান তবে আপনার আর পড়ার দরকার নেই।

এর সাথে সতর্কবাণীটি হ'ল এক বা একাধিক নতুন লাইনে শেষ হওয়া কোনও ফাইলের নামটি এখনও tailসঠিকভাবে পাস করা হবে না। এই সমস্যাটির আশেপাশে কাজ করা জটিল এবং আমি এটিকে পর্যাপ্ত বিবেচনা করি যে এই জাতীয় দূষিত ফাইল নামটি যদি আরও বিপজ্জনক কিছু না করে "এই জাতীয় কোনও ফাইল" ত্রুটি ঘটবে তার তুলনামূলকভাবে নিরাপদ আচরণের মুখোমুখি হয়।

রসালো বিবরণ

কৌতূহলের জন্য এটি এটি কীভাবে কাজ করে, কেন এটি নিরাপদ এবং কেন অন্যান্য পদ্ধতি সম্ভবত তা নয় তার ক্লান্তিকর ব্যাখ্যা।

বিপদ, উইল রবিনসন

প্রথমত, ফাইল পাথগুলি সীমিত করতে নিরাপদ কেবল বাইটটি বাতিল হয় কারণ এটি ইউনিক্স সিস্টেমে ফাইল পাথগুলিতে সর্বজনীনভাবে নিষিদ্ধ। ফাইল পাথের কোনও তালিকা কেবলমাত্র একটি ডিলিমিটার হিসাবে নাল ব্যবহার করার জন্য এবং কোনও প্রোগ্রাম থেকে অন্য প্রোগ্রামে একটি ফাইলের পাথ হস্তান্তর করার সময়, এমন পদ্ধতিতে এমন কাজ করা গুরুত্বপূর্ণ যেগুলি স্বেচ্ছাচারিত বাইটগুলিতে হ্রাস পাবে না। এটি এবং অন্যান্য সমস্যাগুলি সমাধান করার অনেকগুলি আপাতদৃষ্টিতে সঠিক উপায় রয়েছে যা ধরে নিয়েই ব্যর্থ হয় (এমনকি দুর্ঘটনাক্রমে) যে ফাইলের নামগুলিতে কোনও নতুন লাইন বা স্পেস থাকবে না। অনুমানও নিরাপদ নয়।

আজকের উদ্দেশ্যগুলির জন্য প্রথম ধাপটি হ'ল ফাইলগুলির একটি নাল-সীমিত তালিকা পাওয়া। আপনার যদি findজিএনইউ'র -print0মতো সমর্থনকারী থাকে তবে এটি বেশ সহজ :

find . -print0

তবে এই তালিকাটি এখনও আমাদের জানায় না কোনটি নতুন। তাই আমাদের সেই তথ্যটি অন্তর্ভুক্ত করতে হবে। আমি -printfফাইন্ডের স্যুইচটি ব্যবহার করা চয়ন করি যা আমাকে আউটপুটে কী ডেটা প্রদর্শিত হবে তা নির্দিষ্ট করতে দেয়। findসমর্থনের সমস্ত সংস্করণ নয় -printf(এটি মানক নয়) তবে জিএনইউ এটি খুঁজে পায়। যদি আপনি নিজেকে ছাড়া নিজেকে খুঁজে পান তবে আপনাকে -printfনির্ভর করতে হবে -exec stat {} \;কোন মুহুর্তে আপনাকে বহনযোগ্যতার সমস্ত আশা ত্যাগ করতে হবে কারণ statএটি আদর্শ নয়। আপাতত আমি ধরে নিচ্ছি আপনার কাছে জিএনইউ সরঞ্জাম রয়েছে।

find . -printf '%T@.%p\0'

এখানে আমি প্রিন্টফ ফর্ম্যাটটির জন্য জিজ্ঞাসা করছি %T@যা ইউনিক্সের সূচনার সময় থেকেই সেকেন্ডে সংশোধন সময়, পরে একটি পিরিয়ড এবং তার পরে একটি সেকেন্ডের ভগ্নাংশ নির্দেশ করে এমন একটি সংখ্যার পরে। %pনাল বাইটের সাথে শেষ হওয়ার আগে আমি এটিকে আরও একটি পিরিয়ড এবং তারপরে (যা ফাইলটির পুরো পথ) add

এখন আমার আছে

find . -maxdepth 1 \! -type d -printf '%T@.%p\0'

এটি বলার অপেক্ষা রাখে না তবে সাব ডিরেক্টরি এবং সাবস্ক্রিপশন ডিরেক্টরিগুলির সামগ্রীর তালিকাবদ্ধকরণ থেকে সম্পূর্ণ -maxdepth 1প্রতিরোধ করা findহতে পারে \! -type dযা আপনি চান না tail। এখন পর্যন্ত আমার কাছে বর্তমান ডিরেক্টরিতে সংশোধন সময়ের তথ্য সহ ফাইল রয়েছে, সুতরাং এখন আমার সেই পরিবর্তনকাল অনুসারে বাছাই করা দরকার।

এটি সঠিক ক্রমে পাওয়া

ডিফল্টরূপে sortএটির ইনপুটটি নতুন লাইন-সীমিত রেকর্ড হিসাবে প্রত্যাশা করে। আপনার যদি জিএনইউ থাকে তবে sortআপনি -zস্যুইচটি ব্যবহার করে নাল-সীমাবদ্ধ রেকর্ডের আশা করতে বলতে পারেন; মান sortজন্য কোন সমাধান নেই। আমি কেবল প্রথম দুটি সংখ্যা (সেকেন্ড এবং একটি সেকেন্ডের ভগ্নাংশ) অনুসারে বাছাই করতে আগ্রহী এবং আসল ফাইলের নাম অনুসারে বাছাই করতে চাই না তাই আমি sortদুটি জিনিস বলি : প্রথমত, এটি পিরিয়ড বিবেচনা করা উচিত ( .) একটি ক্ষেত্রের ডিলিমিটার এবং দ্বিতীয়টি কীভাবে রেকর্ডগুলি বাছাই করতে হবে তা বিবেচনা করার সময় এটি কেবল প্রথম এবং দ্বিতীয় ক্ষেত্রগুলি ব্যবহার করা উচিত।

| sort -znr -t. -k1,2

সবার আগে আমি তিনটি সংক্ষিপ্ত বিকল্পগুলি বান্ডিল করছি যা একসাথে কোনও মূল্য নেয় না; -znrবলার কেবল একটি সংক্ষিপ্ত উপায় -z -n -r)। এর পরে -t .(স্থানটি isচ্ছিক) sortক্ষেত্রের সীমানার চরিত্রটি বলে এবং -k 1,2ক্ষেত্রের সংখ্যাগুলি নির্দিষ্ট করে: প্রথম এবং দ্বিতীয় ( sortএক থেকে ক্ষেত্র গণনা করে শূন্য নয়)। মনে রাখবেন যে বর্তমান ডিরেক্টরিটির জন্য একটি নমুনা রেকর্ডটি দেখতে পাবেন:

1000000000.0000000000../some-file-name

এর অর্থ এই রেকর্ডটি অর্ডার করার পরে sortপ্রথমে 1000000000এবং তারপরে দেখবে 0000000000-nবিকল্প বলে sortযখন এই মান তুলনা সাংখ্যিক তুলনা ব্যবহার, কারণ যদি দুটি মানই নম্বর আছে। সংখ্যাগুলি নির্দিষ্ট দৈর্ঘ্যের হওয়ার কারণে এটি গুরুত্বপূর্ণ নয় তবে এটি কোনও ক্ষতি করে না।

দেওয়া অন্যান্য সুইচ sortহয় -rজন্য "বিপরীত।" ডিফল্ট হিসাবে একটি সংখ্যার সাজানোর আউটপুট প্রথমে সর্বনিম্ন সংখ্যা হবে, -rএটি পরিবর্তন করে যাতে এটি সর্বনিম্ন এবং সর্বশেষে সর্বোচ্চ সংখ্যার তালিকা করে। যেহেতু এই সংখ্যাগুলি টাইমস্ট্যাম্পগুলি বেশি তার অর্থ নতুনতর হবে এবং এটি তালিকার শুরুতে নতুন রেকর্ডটি রাখে।

শুধু গুরুত্বপূর্ণ বিট

ফাইল পাথগুলির তালিকাটি যেহেতু এটি থেকে sortউঠে এসেছে এখন তার পছন্দসই উত্তর রয়েছে যা আমরা ঠিক উপরে খুঁজছি। যা অবশিষ্ট রয়েছে তা হ'ল অন্য রেকর্ডগুলি ফেলে দেওয়ার এবং টাইমস্ট্যাম্পটি সরিয়ে ফেলার কোনও উপায় find দুর্ভাগ্যক্রমে এমনকি জিএনইউ headএবং tailনাল-সীমাবদ্ধ ইনপুটটিতে তাদের চালিত করতে সুইচগুলি গ্রহণ করে না। পরিবর্তে আমি এক ধরণের দরিদ্র লোক হিসাবে কিছুক্ষণ লুপ ব্যবহার করি head

| while IFS= read -r -d '' record

প্রথমে আমি আনসেট করি IFSযাতে ফাইলগুলির তালিকা শব্দের বিভাজনের সাথে সম্পর্কিত না হয়। পরবর্তী আমি readদুটি জিনিস বলি : ইনপুট ( -r) এর মধ্যে পালানোর ক্রমগুলির ব্যাখ্যা করবেন না এবং ইনপুটটি নাল বাইট ( -d) দিয়ে সীমিত করা হয় ; এখানে শূন্য স্ট্রিংটি ''নুল দ্বারা ডিলিমেটেড "কোনও ডিলিমিটার" না করতে নির্দেশ করতে ব্যবহৃত হয়। প্রতিটি রেকর্ডটি ভেরিয়েবলটিতে পড়তে হবে recordযাতে প্রতিটি সময় whileলুপটি পুনরাবৃত্তি করে তবে এটির একটি একক টাইমস্ট্যাম্প এবং একটি ফাইলের নাম থাকবে। নোট যে -dএকটি GNU এক্সটেনশান; আপনার যদি কেবল একটি মান থাকে তবে readএই কৌশলটি কার্যকর হবে না এবং আপনার খুব কম সংস্থান রয়েছে।

আমরা জানি যে recordভেরিয়েবলের এর তিনটি অংশ রয়েছে, সমস্তই পিরিয়ড ক্যারেক্টার দ্বারা সীমিত করা হয়। cutইউটিলিটি ব্যবহার করে এগুলির একটি অংশ বের করা সম্ভব।

printf '%s' "$record" | cut -d. -f3-

এখানে পুরো রেকর্ডটি printfসেখানে পৌঁছে দেওয়া হয়েছে এবং সেখান থেকে পাইপ করা হয়েছে cut; ব্যাশ আপনি একটি ব্যবহার করে এই আরও প্রক্রিয়া সহজ পারে এখানে স্ট্রিং থেকে cut -d. -3f- <<<"$record"ভাল অভিনয়ের জন্য। আমরা cutদুটি জিনিস বলি : প্রথমে -dএটি ক্ষেত্রগুলি চিহ্নিত করার জন্য একটি নির্দিষ্ট সীমানা করা উচিত (যেমন sortডিলিমিটার .ব্যবহৃত হয়)। দ্বিতীয়টি নির্দিষ্ট ক্ষেত্রগুলি থেকে কেবল মানগুলি মুদ্রণের cutজন্য নির্দেশিত -f; ক্ষেত্রের তালিকাটি এমন একটি পরিসীমা হিসাবে দেওয়া হয় 3-যা তৃতীয় ক্ষেত্র এবং সমস্ত নিম্নলিখিত ক্ষেত্রের থেকে মান নির্দেশ করে। এর অর্থ এটি রেকর্ডটিতে পাওয়া cutদ্বিতীয়টি সহ সমস্ত কিছু পড়তে এবং উপেক্ষা .করবে এবং তারপরে বাকীটি মুদ্রণ করবে যা ফাইলের পথ অংশ।

সর্বাধিক নতুন ফাইল পাথ মুদ্রণের পরেও চালিয়ে যাওয়ার দরকার নেই: breakদ্বিতীয় ফাইলের পথে না যেতে লুপটি প্রস্থান করে।

tailএই পাইপলাইনের দ্বারা ফিরিয়ে দেওয়া ফাইলের পথে চলমান একমাত্র জিনিস । আপনি আমার উদাহরণে লক্ষ্য করতে পারেন যে আমি সাবসেলের পাইপলাইনটি বন্ধ করে এটি করেছি; আপনি যা খেয়াল করতে পারেন না তা হ'ল আমি সাব-শেলটি ডাবল কোটে আবদ্ধ করেছি। এটি গুরুত্বপূর্ণ কারণ শেষ পর্যন্ত এমনকি কোনও ফাইলের নামের জন্য নিরাপদ থাকার এই সমস্ত প্রচেষ্টা সহ অব্যক্ত সাবস্কেল সম্প্রসারণ এখনও জিনিসগুলিকে ভেঙে দিতে পারে। একটি আরো বিস্তারিত ব্যাখ্যা আপনি আগ্রহী হলে পাওয়া যায়। অনুরোধের দ্বিতীয় গুরুত্বপূর্ণ তবে সহজেই উপেক্ষিত দিকটি tailহ'ল --ফাইলের নামটি প্রসারিত করার আগে আমি এটিতে বিকল্পটি সরবরাহ করেছিলাম । এটি নির্দেশ দেবেtailআর কোনও বিকল্প নির্দিষ্ট করা হচ্ছে না এবং নীচের সমস্ত কিছুই একটি ফাইলের নাম, যা ফাইল ফাইলের নামগুলি শুরু করে এটি পরিচালনা করা নিরাপদ করে -


1
@ আকাশম: কারণ আপনি "আশ্চর্যজনক" ফলাফল পেতে পারেন, উদাহরণস্বরূপ যদি কোনও ফাইলের নামে "অস্বাভাবিক" অক্ষর থাকে (প্রায় সমস্ত অক্ষর বৈধ হয়)।
জন জুইনক

6
যে সমস্ত লোকেরা তাদের ফাইলের নামগুলিতে বিশেষ অক্ষর ব্যবহার করেন তারা যা পান তার

6
প্যাক্সিডাব্লো করতে দেখে সেই মন্তব্যটি যথেষ্ট বেদনাদায়ক ছিল, কিন্তু তখন দু'জন লোক এটির ভোট দিয়েছিল! বগি সফটওয়্যার লেখেন এমন লোকেরা যা কিছু পেয়েছেন তা ইচ্ছাকৃতভাবে প্রাপ্য।
জন জুইনক

4
সুতরাং উপরের সমাধানটি অনুসন্ধানে -প্রিন্টফ বিকল্পের অভাবের কারণে অক্সে কাজ করে না, তবে স্ট্যাট কমান্ডের পার্থক্যের কারণে নিম্নলিখিতটি কেবলমাত্র অক্স উপর কাজ করে ... সম্ভবত এটি tail -f $(find . -type f -exec stat -f "%m {}" {} \;| sort -n | tail -n 1 | cut -d ' ' -f 2)
কারওর পক্ষে

2
"দুর্ভাগ্যক্রমে এমনকি জিএনইউও headএবং tailনাল-সীমাবদ্ধ ইনপুটটিতে তাদের চালিত করতে সুইচগুলি গ্রহণ করে না।" আমার প্রতিস্থাপন head: … | grep -zm <number> ""
কামিল ম্যাকিয়েরোভস্কি

22
tail `ls -t | head -1`

যদি আপনি শূন্যস্থান সহ ফাইলের নামগুলি নিয়ে উদ্বিগ্ন হন,

tail "`ls -t | head -1`"

1
কিন্তু যখন আপনার সর্বশেষ ফাইলে স্পেস বা বিশেষ অক্ষর থাকবে তখন কী হবে? এই সমস্যাটি এড়াতে subs instead এর পরিবর্তে $ () ব্যবহার করুন এবং আপনার সাব-শেলটি উদ্ধৃত করুন।
ফোগগ

আমি এই পছন্দ। পরিষ্কার এবং সহজ। হিসাবে এটি করা উচিত.

6
আপনি দৃust় এবং সঠিক ত্যাগ যদি এটি পরিষ্কার এবং সহজ হওয়া সহজ।
ফগ্গ

2
ঠিক আছে, এটি আপনি কী করছেন তার উপর নির্ভর করে। একটি সমাধান যা সর্বদা সর্বত্র সম্ভাব্য ফাইলনামগুলির জন্য কাজ করে, খুব সুন্দর, তবে একটি সীমাবদ্ধ পরিস্থিতিতে (লগ ফাইলগুলি, উদাহরণস্বরূপ, পরিচিত অ-অদ্ভুত নাম সহ) এটি অপ্রয়োজনীয় হতে পারে।

এটি এ পর্যন্ত সবচেয়ে পরিষ্কার সমাধান। ধন্যবাদ!
ডেমিম্যাক্স

4

তুমি ব্যবহার করতে পার:

tail $(ls -1t | head -1)

$()কনস্ট্রাক্ট একটি উপ-শেল যা কমান্ড সঞ্চালিত শুরু ls -1tকরে দিয়ে বংশীধ্বনিতুল্য (সময় অনুক্রমে সমস্ত ফাইল, প্রতি লাইনে একটি তালিকা) head -1প্রথম লাইন (ফাইল) জন্য।

এই কমান্ডের আউটপুট (অতি সাম্প্রতিক ফাইল) এর পরে tailপ্রক্রিয়া করার জন্য পাস করা হয়।

মনে রাখবেন যে এটি ডিরেক্টরি তৈরির ঝুঁকি নিয়ে চলে যদি এটি সর্বাধিক সাম্প্রতিক ডিরেক্টরি এন্ট্রি তৈরি করা হয়। আমি সেই কৌশলটি একটি উলামে ব্যবহার করেছি একটি ডিরেক্টরিতে সর্বাধিক সাম্প্রতিক লগ ফাইল (একটি ঘোরানো সেট থেকে) সম্পাদনা করার জন্য কেবল সেই লগ ফাইলগুলিই রয়েছে।


-1প্রয়োজন নেই, lsযখন এটি একটি নল আছে আপনার জন্য আছে যে। উদাহরণস্বরূপ তুলনা করুন lsএবং করুন ls|cat
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

এটি লিনাক্সের অধীনে হতে পারে। "সত্য" ইউনিক্সে, প্রক্রিয়াগুলি তাদের আউটপুটটি কোথায় চলেছে তার ভিত্তিতে তাদের আচরণ পরিবর্তন করে নি। এটি পাইপলাইন

হুম, নিশ্চিত নয় যে এটি সঠিক - আইটিএসআর একটি ফিল্টার মাধ্যমে আউটপুট পাইপ করার সময় 4.2BSD এর অধীনে কলাম-ফর্ম্যাটড আউটপুট পেতে "এলএস-সি" জারি করতে হবে এবং আমি নিশ্চিত যে সোলারিসের অধীনে ls একইভাবে কাজ করে। "এক, সত্য ইউনিক্স" যাইহোক?

দর! দর! ফাইলের নামগুলির মধ্যে স্পেস রয়েছে!
নর্মান রামসে

@ টিএমএন: সত্যিকারের ইউনিক্সের উপায় হ'ল মানবেতর গ্রাহকদের জন্য ls এর উপর নির্ভর করা। "যদি আউটপুটটি টার্মিনালে হয় তবে বিন্যাসটি বাস্তবায়ন-সংজ্ঞায়িত।" - এই অনুমান। আপনি যদি নিশ্চিত হতে চান তবে আপনাকে ls -1 বা ls -C বলতে হবে।
phogg

4

পসিক্স সিস্টেমে "সর্বশেষ নির্মিত" ডিরেক্টরি এন্ট্রি পাওয়ার কোনও উপায় নেই। প্রতিটি ডিরেক্টরি এন্ট্রি রয়েছে atime, mtimeএবং ctime, তবে মাইক্রোসফ্ট উইন্ডোজের বিপরীতে, এর ctimeঅর্থ ক্রিয়েশনটাইম নয়, "শেষ স্থিতির পরিবর্তনের সময়"।

সুতরাং আপনি সবচেয়ে ভাল পেতে পারেন "সর্বশেষ সম্প্রতি পরিবর্তিত ফাইলটি লেজু করা", যা অন্য উত্তরে ব্যাখ্যা করা হয়েছে। আমি এই আদেশের পক্ষে যাব:

লেজ -f "$ (ls -tr | সেড 1 কিউ)"

lsকমান্ডের চারপাশে উদ্ধৃতিগুলি নোট করুন । এটি প্রায় সমস্ত ফাইলের নাম সহ স্নিপেট কাজ করে।


চমৎকার কাজ. সোজা কথা। +1
রামসে

4

আমি কেবল ফাইলের আকার পরিবর্তন দেখতে চাই আপনি ঘড়িটি ব্যবহার করতে পারেন।

watch -d ls -l

3

ইন zsh:

tail *(.om[1])

দেখুন: http://zsh.sourceforge.net/Doc/Release/Expansion.html# গ্লোব-কোয়ালিফায়ারগুলি , এখানে mপরিবর্তনের সময়কে বোঝায় m[Mwhms][-|+]nএবং পূর্ববর্তীটির oঅর্থ এটি একটি উপায়ে বাছাই করা হয়েছে ( Oএটি অন্যভাবে সাজান)। .একমাত্র উপায় নিয়মিত ফাইল। বন্ধনীগুলির [1]মধ্যে প্রথম আইটেমটি বাছাই করে। তিনটি ব্যবহার বাছাই করতে [1,3], প্রাচীনতম ব্যবহারটি পেতে [-1]

এটি খুব ছোট এবং ব্যবহার করে না ls


1

এটি করার জন্য সম্ভবত এক মিলিয়ন উপায় রয়েছে তবে আমি যেভাবে এটি করব তা হ'ল:

tail `ls -t | head -n 1`

ব্যাকটিক্সের মধ্যে বিটগুলি (অক্ষরের মতো উদ্ধৃতি) ব্যাখ্যা করা হয় এবং ফলটি লেজতে ফিরে আসে।

ls -t #gets the list of files in time order
head -n 1 # returns the first line only

2
ব্যাকটিকস দুষ্ট। পরিবর্তে $ () ব্যবহার করুন।
উইলিয়াম পার্সেল

1

আমার স্নাতকের:

tail -f /path/to/directory/*

আমার জন্য ঠিক কাজ করে।

আপনি টেল কমান্ড শুরু করার পরে উত্পন্ন ফাইলগুলি পেতে সমস্যা are তবে আপনার যদি এটির প্রয়োজন না হয় (যেমন উপরের সমস্ত সমাধানগুলি এটির জন্য যত্নশীল নয়), অস্ট্রিকটি কেবল সহজ সমাধান, আইএমও।



0

কেউ এটি পোস্ট করেছেন এবং তারপরে এটি কোনও কারণে মুছে ফেলা হয়েছে তবে এটি কেবলমাত্র কাজ করে, তাই ...

tail -f `ls -tr | tail`

আপনি ডিরেক্টরি বাদ দিতে হবে, তাই না?
amit

1
আমি এটি প্রাথমিকভাবে পোস্ট করেছি তবে আমি এটিকে মুছে ফেলেছি যেহেতু আমি সর্পিগালের সাথে একমত হয়েছি যে থেকে আউটপুট পার্সিং করা lsসবচেয়ে স্মার্ট জিনিস নয় ...
ক্রিস্টোফিড

আমার এটি দ্রুত এবং নোংরা দরকার, এতে কোনও ডিরেক্টরি নেই। সুতরাং, আপনি যদি নিজের উত্তর যুক্ত করেন তবে আমি তা গ্রহণ করব
Itay Moav -Malimovka

0
tail -f `ls -lt | grep -v ^d | head -2 | tail -1 | tr -s " " | cut -f 8 -d " "`

ব্যাখ্যা:

  • ls -lt: পরিবর্তনের সময় অনুসারে বাছাই করা সমস্ত ফাইল এবং ডিরেক্টরিগুলির তালিকা
  • grep -v ^ d: ডিরেক্টরিগুলি বাদ দিন
  • হেড -2 এর পরে: প্রয়োজনীয় ফাইলের নাম পার্স করা

1
চতুর জন্য +1, এলএস আউটপুট পার্সিংয়ের জন্য -2, সাব-শেল উদ্ধৃত না করার জন্য -1, একটি যাদু "ক্ষেত্র 8" অনুমানের জন্য -1 (এটি বহনযোগ্য নয়!) এবং পরিশেষে খুব চালাকের জন্য -1 । সামগ্রিক স্কোর: -4।
ফগ্গ

@ সরপিজাল একমত যদিও খারাপ উদাহরণ হতে পেরে খুশি।
amit

হ্যাঁ
এতগুলি

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