সর্বশেষ ডিরেক্টরিটি (সর্বশেষ ফাইল নয়) পান


15

আমার ফোল্ডারে parentনিম্নলিখিত সামগ্রী রয়েছে:

A.Folder B.Folder C.File

এটি ভিতরে ফোল্ডার এবং ফাইল উভয় আছে। B.Folderআরও নতুন এখন আমি কেবল পেতে চাই B.Folder, আমি কীভাবে এটি অর্জন করতে পারি? আমি এটি চেষ্টা করেছিলাম,

ls -ltr ./parent | grep '^d' | tail -1

তবে এটি আমাকে দেয় drwxrwxr-x 2 user user 4096 Jun 13 10:53 B.Folder, তবে আমার কেবল নামটি দরকার B.Folder


1
এটি ব্যবহার করুনls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'
বারপابাবা

অ্যাজকের কাজগুলি ব্যবহার করে, তবে আমি দেখতে চাই যে কোনও পরিষ্কার সমাধান রয়েছে কিনা। :)
ড্যানিয়েল

অনুসন্ধান . -ম্যাক্সডেপথ 1-টাইপ ডি | TZ = utc xargs ls -ld - পুরো সময় | সাজান-কে 6
ctrl-alt-delor

উত্তর:


24

এটা চেষ্টা কর:

$ ls -td -- */ | head -n 1

-tবিকল্পগুলি lsপরিবর্তনের সময় অনুসারে বাছাই করে, নতুনতম।

আপনি যদি মুছে ফেলতে চান /:

$ ls -td -- */ | head -n 1 | cut -d'/' -f1

1
কীভাবে স্ল্যাশ থেকে মুক্তি পাবেন /?
ড্যানিয়েল

আপনি অন্য ফোল্ডারে থাকলে এটি কাজ করে না। মানে ls -td -- ./parent | head -n 1আমার সঠিক ফলাফল দেয় না, আমি কি cd ./parentপ্রতিবারের মতো সাব-শেল ব্যবহার এবং এই আদেশটি কার্যকর করতে চাই? কোন সমাধান?
ড্যানিয়েল

@ ড্যানিয়েল: এটি কার্যকর করতে আপনার অবশ্যই আমার উত্তর চলতি ডিরেক্টরিতে চালানো উচিত। অন্যথায়, আপনাকে অবশ্যই হার্সনের উত্তরের মতো একটি আপেক্ষিক পথ ব্যবহার করতে হবে।
কিউংলম

শেষ / অপসারণ কাজ করে না। উদাহরণ: / বাড়ি / কুও / বিন / প্রত্যাশিত: / হোম / কিউও / বিন
মারিয়াস

5
ls -td -- ./parent/*/ | head -n1 | cut -d'/' -f2

হারসনের সমাধানের পার্থক্য হ'ল স্ল্যাশ *, যা শেলটিকে সমস্ত নন-দির ফাইল উপেক্ষা করে makes জ্নুকের পার্থক্য , আপনি অন্য ফোল্ডারে থাকলে এটি কাজ করবে।

ট্রিলিং '/' মোছার জন্য কাটকে প্যারেন্ট ডিরেক্টরিগুলির সংখ্যা (2) জানতে হবে। আপনার যদি তা না থাকে তবে ব্যবহার করুন

VAR=$(ls -dt -- parent/*/ | head -n1); echo "${VAR::-1}"

3

বাধ্যতামূলক zsh উত্তর:

latest_directory=(parent/*(/om[1]))

প্রথম বন্ধনীগুলির অক্ষরগুলি হ'ল গ্লোবাল কোয়ালিফায়ার : /কেবলমাত্র ডিরেক্টরিগুলির সাথে মেলে, omবয়স বাড়িয়ে ম্যাচগুলি বাছাই করা এবং [1]কেবল প্রথম (অর্থাৎ সর্বশেষতম) ম্যাচটি ধরে রাখতে। Nকোনও খালি অ্যারে পেতে চাইলে যুক্ত করুন (সাধারণত 1-এলিমেন্টি অ্যারে পাবেন) এর কোনও সাব-ডিরেক্টরী না থাকলে parent

বিকল্প হিসাবে, ধরে parentনিলে এতে কোনও শেল গ্লোববিং চরিত্র নেই:

latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory

আপনার কাছে জেডএস না থাকলে তবে আপনার সাম্প্রতিক জিএনইউ সরঞ্জাম রয়েছে (যেমন নন-এমবেডেড লিনাক্স বা সাইগউইন), আপনি ব্যবহার করতে পারেন findতবে এটি জটিল। এখানে একটি উপায়:

latest_directory_inode=$(find parent -mindepth 1 -maxdepth 1 -type d -printf '%Ts %i\n' | sort -n | sed -n '1 s/.* //p')
latest_directory=$(find parent -maxdepth 1 -inum "$latest_directory_inode")

এর সাথে একটি সহজ সমাধান রয়েছে ls, যা কোনও ডিরেক্টরি নামে নতুন লাইন বা (কিছু সিস্টেমে) মুদ্রণযোগ্য অক্ষর না থাকা পর্যন্ত কাজ করে:

latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}


2

ডিরেক্টরি সম্বোধন স্থান থাকলেও নিম্নলিখিত আদেশটি কাজ করবে:

cp `find . -mindepth 1 -maxdepth 1 -type d  -exec stat --printf="%Y\t%n\n" {} \;  |sort -n -r |head -1 |cut -f2'`/* /target-directory/.

ব্যাকটিক্সে স্টাফগুলির আপডেট ব্যাখ্যা:

  • . - বর্তমান ডিরেক্টরি (আপনি এখানে একটি নিখুঁত পাথ নির্দিষ্ট করতে চাইতে পারেন)
  • -mindepth/-maxdepth - কেবল বর্তমান ডিরেক্টরিগুলির তাত্ক্ষণিক শিশুদের জন্য সন্ধানের আদেশ সীমাবদ্ধ করুন
  • -type d - শুধুমাত্র ডিরেক্টরি
  • -exec stat .. - পরিবর্তিত সময় এবং ডিরেক্টরিটির নাম কোনও ট্যাব (এবং কোনও স্থান নয়) দিয়ে আলাদা হওয়া থেকে বের করে দেয়
  • sort -n -r |head -1 | cut -f2 - তারিখটি ডিরেক্টরিটির আদেশ দেয় এবং সর্বাধিক সংশোধিত পুরো নামটি আউটপুট করে দেয় (এমনকি ডিফল্ট ডিলিমিটার ট্যাব হিসাবে কিছু জায়গা থাকলেও)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.