ডিরেক্টরিতে সাব ডিরেক্টরি এবং সেই ডিরেক্টরিতে তাদের বিষয়বস্তু তালিকাবদ্ধ না করে একটি ডিরেক্টরিতে ফাইল তালিকাভুক্ত করা হয়


24

আমি একই ডিরেক্টরিতে থাকা কোনও উপ-ডিরেক্টরিকে তালিকা না করে কোনও ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা তৈরি করতে চাই এবং সেই তালিকাটি কোনও নতুন ফাইলে মুদ্রণ করতে চাই।

ls -d * > filelist

বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা তৈরি করবে, তবে এটি বর্তমান ডিরেক্টরিতে সাব-ডিরেক্টরিকেও তালিকাবদ্ধ করে। আমি বিকল্পটি findব্যবহার করে কমান্ডটি চেষ্টা করেছিলাম -maxdepth 1- তবে, আউটপুট ফর্ম্যাটটি একটি সমস্যা কারণ এটি ফাইলের নামের পাশাপাশি পথটিও মুদ্রণ করে।

যদি কেউ দয়া করে আমাকে অন্য কমান্ড বা ব্যবহারের বিকল্পগুলি বলতে পারেন যা একটি ডিরেক্টরিতে কেবলমাত্র ফাইলের আউটপুট তালিকা তৈরি করে এবং উপ-ডিরেক্টরি বা তাদের বিষয়বস্তুর নাম নয়, আমি এটির প্রশংসা করব।


2
আমি ls -d *এখানে গোপন ফাইল / ফোল্ডারগুলি বাদ দিয়ে কেবল বর্তমান ফোল্ডারে ফাইল এবং ফোল্ডারগুলি তালিকাভুক্ত করছি ;
জিএম-স্ক্রিপ্ট-লেখক-62850

হ্যাঁ, তবে আমি চাই না যে ডিরেক্টরিতে থাকা ফোল্ডারগুলি তালিকাবদ্ধ হোক, কেবল সেই ডিরেক্টরিতে থাকা ফাইলগুলি তালিকাবদ্ধ হোক
জ্যানেট

অনুরূপ: ইউনিক্স এসই
তে

উত্তর:


22

সমাধান ভিত্তিক সমাধান:

find . -maxdepth 1 -type f -printf '%f\n'

বাশ-ভিত্তিক সমাধান:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

বাশ-ভিত্তিক সমাধানটি আপনাকে এমন সমস্ত কিছু দেবে যা ডিরেক্টরি নয়; এতে নামযুক্ত পাইপগুলির মতো জিনিস অন্তর্ভুক্ত থাকবে (আপনি সম্ভবত এটি চান)। আপনি যদি কেবলমাত্র ফাইলগুলি চান তবে findকমান্ডটি ব্যবহার করুন বা এর মধ্যে একটি:

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

আপনি যদি এটি নিয়মিত ব্যবহার করতে যাচ্ছেন তবে অবশ্যই আপনি এটির কোনও জায়গায় কোনও নাম রাখবেন ~/.bashrc:

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

যেহেতু আপনি যে মন্তব্যে উল্লেখ করেছেন যে আপনি উবুন্টুর চেয়ে বরং OSX এ রয়েছেন, তাই আমি পরামর্শ দেব যে আপনি পরের বার অ্যাপল বা আরও সাধারণ ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জ সাইটগুলিতে প্রশ্নগুলি নির্দেশ করবেন ।


1
আপনি লুকানো ফাইলগুলি অন্তর্ভুক্ত করতে চান কিনা তার ভিত্তিতে এই সমাধানগুলি আপনার জন্য সঠিক কিনা তা নিশ্চিত করে নিন।
কেভিন হুইলার 21

10

কেবলমাত্র ফাইলের নামগুলি তালিকাবদ্ধ করুন:

1. ls -p | গ্রেপ-ভি / (লুকানো ফাইল ছাড়া)
 2. ls -l | গ্রেপ ^ - | tr -s '' | কাটা-ডি '' -ফ 9 (লুকানো ফাইল ছাড়া)

 a) ls -pa | গ্রেপ-ভি / (লুকানো ফাইল সহ)
 খ) ls -la | গ্রেপ ^ - | tr -s '' | কাটা-ডি '' -f (লুকানো ফাইল সহ)

ডিরেক্টরি কেবল তালিকা:

1. ls -p | গ্রেপ / (লুকানো ছাড়া)
 2. ls -l | গ্রেপ ^ ডি | tr -s '' | কাটা-ডি '' -ফ 9 (গোপন ছাড়াই)

 a) ls -pa | গ্রেপ / (লুকানো সহ)
 খ) ls -l | গ্রেপ ^ ডি | tr -s '' | কাটা-ডি '' -ফ 9 (লুকানো সহ)

grep -v -e ^ $ ফলাফল থেকে ফাঁকা লাইন সরিয়ে ফেলা হয়।

আরও বিশদ :
ls -p পতাকাটি ডিরেক্টরি নামের শেষে '/' লাগাতে হবে, -আর পতাকাটি পুনরাবৃত্ত অনুসন্ধানের জন্য, -l তথ্যের সাথে তালিকার জন্য, এল, তথ্য সহ গ্রেপ্তার সমস্ত ফাইল (লুকানো ফাইল সহ) তালিকাভুক্ত করার জন্য -v পতাকাটি ফলাফল ইনভারশন এবং রেগেক্সের মিলের জন্য -e পতাকা।


7

কেবল নিয়মিত ফাইলগুলি তালিকাভুক্ত করতে:

ls -al | grep ^-

প্রতীকী লিঙ্কগুলি অন্তর্ভুক্ত রয়েছে:

ls -al | grep ^[-l]

তালিকার প্রথম অক্ষরটি যেখানে ফাইলের ধরণ বর্ণনা করে, তাই এর -অর্থ এটি একটি নিয়মিত ফাইল, প্রতীকী লিঙ্কটিl

Debian / Ubuntu-

সমস্ত মিলে যাওয়া ফাইলগুলির নাম মুদ্রণ করুন (লিঙ্ক সহ):

run-parts --list --regex . .

পরম পাথ সহ:

run-parts --list --regex . $PWD

এর /etcসাথে শুরু হওয়া সমস্ত ফাইলের নাম মুদ্রণ করুন pএবং এর সাথে শেষ হবে d:

run-parts --list --regex '^p.*d$' /etc

5

তবুও আরেকটি সমাধান, একটি নির্লজ্জভাবে সংক্ষিপ্ত যা আমার পক্ষে কাজ করেছে:

ls -la | grep -E '^[^d]' > files

আমার জন্য নিখুঁত,ls -alR |grep -E '^-'
এখানে

4

আমি সন্ধান করতে এবং প্রয়োজনে কেবল আউটপুট থেকে ডিরেক্টরিটির নাম সরাতে ব্যবহার করার পরামর্শ দেব:

find . -type f -maxdepth 1 | sed s,^./,,

2
-maxdepth 1কোনো পূর্বে ফিল্টার আসা উচিত, এবং আপনি ব্যবহার না করেই এই ফলাফল অর্জন করতে পারেন sedসঙ্গে -printfবিকল্প, অর্থাত্: find . -maxdepth 1 -type f -printf '%f\n'(এই একটি অতিরিক্ত প্রোগ্রাম ব্যবহার অধিক কার্যকরী থাকবে)।
অশুভপুটি

3
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

আর একটি সম্ভাব্য বিকল্প হ'ল

ls -F | grep -v '/' | sed /[@*]$// > filelist

--file-typeফোল্ডার (কিন্তু এছাড়াও সিম্বলিক লিঙ্ক। শেষে একটি @ শেষে রাখে A / The grep -v '/'সাব সরিয়ে ফেলা হবে (কারণ তারা এখন দিয়ে শেষ একটি '/')। sed s/@$//অপসারণ যে @। -1 কপি করে প্রিন্ট এক প্রতি লাইনে ফাইল যাতে grep -v সঠিকভাবে কাজ করবে।


আপনার প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ. দুর্ভাগ্যক্রমে, এটি আমার পক্ষে কাজ করছে না, সম্ভবত আমি এটি ভুলভাবে সম্পাদন করছি। আপনি আমাকে যে সঠিক কমান্ডটি দিয়েছেন তা আমি যদি ব্যবহার করি তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: ls: অবৈধ বিকল্প - - ব্যবহার: ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [ফাইল ...] আমি * ওয়াইল্ডকার্ড চরিত্রটি পাশাপাশি ব্যবহারের জায়গায় চেষ্টা করেছি - ফাইল-টাইপের সাথে একত্রে। যদি আপনি স্পষ্ট করতে পারতেন তবে আমি এটির প্রশংসা করব!
জ্যানেট

কমান্ডটি আমার পক্ষে কাজ করে (১৩.০৪ চলছে), আপনি উবুন্টুর কোন সংস্করণ ব্যবহার করছেন ?; -1আপনার এটির দরকার নেই গ্রেপ করাতে কিছু যায় আসে না; আপনি যদি লুকানো ফাইলগুলি অন্তর্ভুক্ত করতে চান তবে -aবিকল্পটি ব্যবহার করুনls
জিএম-স্ক্রিপ্ট-লেখক -২২8৫০

আসলে, আমি একটি ম্যাক উপর কাজ করছি। সম্ভবত কমান্ডটি ম্যাক ওএস এক্স বা ইউনিক্সে কিছুটা আলাদা?
জানেট

1
আপনি চেষ্টাও করতে পারেনls -F | grep -v '/' | sed s/[@*]$// > filelist
ডাঃ টাওয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.