বর্তমান ডিরেক্টরিতে কেবল নিয়মিত ফাইল (তবে ডিরেক্টরি নয়) তালিকাভুক্ত করুন


126

আমি ls -ld */বর্তমান ডিরেক্টরিতে সমস্ত ডিরেক্টরি এন্ট্রি তালিকা করতে ব্যবহার করতে পারি । বর্তমান ডিরেক্টরিতে নিয়মিত সমস্ত ফাইল তালিকাভুক্ত করার জন্য কি একইভাবে সহজ উপায় আছে? আমি জানি আমি ব্যবহার করতে পারি

find . -maxdepth 1 -type f

বা স্ট্যাট

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-

তবে এগুলি অতিরিক্ত মার্জিত হিসাবে আমাকে আঘাত করে না। কেবলমাত্র নিয়মিত ফাইলগুলি (আমি ডিভাইস, পাইপ ইত্যাদির বিষয়ে যত্ন নিই না) তবে বর্তমান ডিরেক্টরিটির উপ-ডিরেক্টরিগুলি নয়, এর তালিকা করার কি খুব ছোট উপায় আছে? প্রতীকী লিঙ্কগুলির তালিকা তৈরি করা একটি প্লাস হতে পারে তবে এটি প্রয়োজনীয়তা নয়।


5
"অতিরিক্ত মার্জিত" বলতে কী বোঝ? আমি যতদূর জানি, findকমান্ডটি আপনি যা চান তা করার সেরা উপায়। কিছু নির্ভরযোগ্য অন্যান্য বিকল্পের জন্য, আপনার শেল নির্দিষ্ট কমান্ডগুলি (এবং সেগুলি বহনযোগ্য ছাড়াও কিছু) হওয়া উচিত!
রাহমু

@ রহমু আমি এর অনুরূপ কিছু জন্য ছিলাম ls -d */যা সংক্ষিপ্ত, টাইপ করা সহজ এবং সহজে বোঝা যায়। আমি zsh ব্যবহার না করা সত্ত্বেও আমি Ulrich Dangel এর উত্তর নিয়ে বেশ খুশি।
ড্যানিয়েল কুলম্যান

অনুরূপ: উবুন্টু এসই
তে

উত্তর:


32

সঙ্গে zshএবং উল্লিখিত glob কোয়ালিফায়ার আপনি সহজেই সরাসরি প্রকাশ করতে পারেন, যেমন:

echo *(.)

হয় কেবলমাত্র নিয়মিত ফাইলগুলির তালিকা বা আপনার কনফিগারেশনের উপর নির্ভর করে একটি ত্রুটি ফিরে আসবে।

নন-ডিরেক্টরিগুলির জন্য:

echo *(^/)

(সিমলিঙ্কগুলি (ডিরেক্টরিতে অন্তর্ভুক্ত), নামযুক্ত পাইপ, ডিভাইস, সকেট, দরজা অন্তর্ভুক্ত করবে ...)

echo *(-.)

নিয়মিত ফাইলগুলিতে নিয়মিত ফাইল এবং সিমলিংকের জন্য।

echo *(-^/)

নন-ডিরেক্টরি এবং ডিরেক্টরিতে কোনও চিহ্ন নেই।

এছাড়াও, Dযদি আপনি ডি ওটি ফাইলগুলি (লুকানো ফাইলগুলি) অন্তর্ভুক্ত করতে চান তবে গ্লোব্বিং কোয়ালিফায়ার দেখুন *(D-.)


170
ls -p | grep -v / 

এই কমান্ডটি সমস্ত অ গোপনীয় ফাইলগুলি তালিকাভুক্ত করে না যা ডিরেক্টরিগুলি নয় (নিয়মিত ফাইল, লিঙ্ক, ডিভাইস ফাইল , ইত্যাদি)। লুকানো ফাইলগুলিও অন্তর্ভুক্ত করতে -Aবিকল্পটি যুক্ত করুনls

এটি ধরে নেয় যে কোনও ফাইলেরই নামে নতুন লাইন অক্ষর নেই। একটি -qবিকল্প যুক্ত করে lsসমস্ত অন-প্রিন্টযোগ্য অক্ষরগুলিকে নতুন ?লাইনে রূপান্তর করতে পারে , গ্যারান্টি দিয়ে সেগুলি একটি লাইনে রয়েছে এবং লাইন-ভিত্তিক ইউটিলিটি যেমন খাওয়ানোর জন্য grepএবং টার্মিনালে মুদ্রণের জন্য উপযুক্ত suitable


14
+1, এটি একটি ভাল উত্তর। কোনও মন্তব্য ছাড়াই কোনও নতুন ব্যবহারকারীকে ভোট দেওয়া আমার পক্ষে চমকপ্রদ, বিশেষত যখন কাজের উত্তর সরবরাহ করা হয়। কোনও ফাইল প্রান্তে যদি নতুন লাইন থাকে তবে আমি এটি দেখতে পাচ্ছি যেখানে এটি সঠিকভাবে কাজ করবে না is সমর্থিত রঙগুলি বজায় রাখা একটি দুর্দান্ত সংযোজন হবে where গনুহ জন্য আপনি যোগ করতে পারিনি --color=alwaysকরার lsজন্য ওএসএক্স, -G
গ্রামীণ

হাই, আপনি যে আদেশ দিয়েছেন তা দুর্দান্ত এবং এটি অবশ্যই আমাকে সাহায্য করবে তবে আমি ভাবছিলাম যে উপরের কমান্ডটি ব্যবহার করা এবং একই সাথে ফাইলের অনুমতি পরিবর্তন করা সম্ভব কিনা? আমি sudo chmod 777শেষে যুক্ত করার চেষ্টা করেছি , এবং আমাকে ত্রুটি দেওয়া হয়েছিল ... যে কোনও সাহায্যের প্রশংসা করা হয়
ডিসিডিপিয়া

3
আপনি যদি সিমলিঙ্কগুলি বাদ দিতে চান যা ডিরেক্টরিতে নির্দেশ করে ls -pL | grep -v /। যোগ করা -Ldereferences প্রতীকী লিঙ্কগুলি।
ম্যাথিয়াস ব্রাউন

1
যদি আপনারও ওয়াইল্ডকার্ড ফিল্টার ব্যবহার করতে চান তবে করুন ls -pdL something* | grep -v /। যুক্ত -dবিকল্পটি ডিরেক্টরিগুলি তাদের তালিকাভুক্ত করে, তাদের বিষয়বস্তুগুলি নয়, সুতরাং সেগুলি সঠিকভাবে বাদ দেওয়া হবে।
রকালাইটে

এবং আপনি যদি ফোল্ডার ছাড়াই সমস্ত ফাইল দখল করতে চান তবে কেবল
--v

23

কেবল নিয়মিত ফাইলের তালিকা করতে:

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

15

lsএটি করার কোনও বিকল্প নেই, তবে ইউনিক্স এবং লিনাক্স সম্পর্কে একটি দুর্দান্ত বিষয় হ'ল দীর্ঘ-ঘূর্ণিত এবং অকার্যকর পাইপলাইনগুলি সহজেই শেল স্ক্রিপ্ট, ফাংশন বা উলেস রূপে রূপান্তরিত হতে পারে। এবং এগুলি, অন্য কোনও প্রোগ্রামের মতো পাইপলাইনে ব্যবহৃত হতে পারে।

(দ্রষ্টব্য: ফাংশন এবং উপনামগুলির সাথে কিছু স্কোপ সমস্যা রয়েছে S স্ক্রিপ্টগুলি যে কোনও নির্বাহযোগ্য যা সেগুলি পড়তে ও চালাতে পারে তার জন্য উপলভ্য Ali অ্যালিয়াস এবং ফাংশন কেবলমাত্র বর্তমান শেলটিতে উপলভ্য - যদিও একটি সাব-শেলের। প্রোফাইল / .bashrc ইত্যাদি পুনরায় সংজ্ঞা দিতে পারে এগুলি এবং সেগুলি এগুলিকে উপলব্ধ করে তোলে Also এছাড়াও, কোনও ভাষাতে কোনও স্ক্রিপ্ট লেখা যেতে পারে - যার মধ্যে বাশ / শ, আর্ক, পারল, পাইথন এবং অন্যান্য - যে কোনওটি কাজের জন্য সেরা বা আপনি যেটির সাথে সর্বাধিক পরিচিত)

যেমন

alias lsf='find . -maxdepth 1 -type f -print0 | xargs -0r ls'

আমি xargs যুক্ত করেছি যাতে আপনি সমস্ত সাধারণ lsবিকল্প ব্যবহার করতে পারেন , যেমনlsf -lrS

যেহেতু এটি ব্যবহার করে find, সমস্ত সাধারণভাবে লুকানো ডটফিলগুলি প্রদর্শিত হবে এবং সমস্ত ফাইলের নাম। / - এর সাথে উপস্থাপিত হবে - এটি কেবলমাত্র তাত্পর্য লক্ষ্য করবেন about

আপনি এতে ডট ফাইলগুলি বাদ দিতে পারেন ! -iname '.*'তবে তারপরে আপনার দুটি উপন্যাসের সংস্করণ থাকতে হবে - একটি যা ডট ফাইল প্রদর্শন করে এবং একটিটি এটি নয়।

alias lsf2='find . -maxdepth 1 -type f -a ! -iname '\''.*'\'' -print0 | xargs -0r ls'

বিকল্পভাবে, যদি lsfকোনও ওলিফের পরিবর্তে কোনও স্ক্রিপ্ট থাকে তবে আপনি বিকল্পগুলি পার্স করতে পারেন (সম্ভবত গোটপটস বা / ইউএসআর / বিন / গিওপেট বা অনুরূপ সহ) এবং ডটফাইলগুলি -aউপস্থিত না থাকলে বাদ দিতে পারেন ।


-nameযথেষ্ট, আপনার দরকার নেই -iname
টোটার

8
bash-4.2$ ls -F | grep -v '[/@=|]$' | more

Ls- এর বিকল্প বিকল্পটি এক্সিকিউটেবল, / ডিরেক্টরিতে, @ প্রতীকী লিঙ্কগুলিতে, = সকেটে, এবং | ফিফগুলিতে এরপরে আউটপুট থেকে অ-নিয়মিত ফাইল অক্ষরগুলি বাদ দিতে আপনি গ্রেপ ব্যবহার করতে পারেন এবং আপনার কাছে ফাইল রয়েছে। এটি কেবল zsh নয়, যে কোনও শেলটিতে কাজ করবে।

দুর্বলতাগুলি হ'ল:

  1. কোন ফাইল যার নাম শেষ হয় @, =বা |বাদ দেওয়া হবে (কিন্তু আপনি কি সত্যিই নামে যারা অক্ষর ফাইল যাহাই হউক না কেন থাকা উচিত নয়)
  2. এটি কোনও সিস্টেমে দরজার মতো ডিভাইস ফাইল বা কিছু বিদেশী ফাইলগুলিকে বাদ দেয় না।
  3. এক্সিকিউটেবল যে কোনও ফাইলের জন্য আপনার কাছে একটি তারকাচিহ্ন যুক্ত হবে। আউটপুট থেকে কোনও '*' অক্ষর অপসারণ করতে সেডের মাধ্যমে পাইপিংয়ের মাধ্যমে এটি পরিচালনা করা যেতে পারে।
  4. নতুন লাইনের অক্ষরযুক্ত ফাইলের নাম থাকলে এটি সঠিকভাবে কাজ করে না।

সিস্টেমে আমি এই লিখছি, ফাইল 10% ধারণকারী নাম আছে =, @বা |অক্ষর। =মাইল্ডির বা ফাইলনামগুলিতে সাধারণ যেগুলির একটি বেস 64 বা উদ্ধৃত-প্রিন্টযোগ্য এনকোডযুক্ত অংশ রয়েছে। @স্থানীয় সংজ্ঞাতে, ইমেল ঠিকানা এবং আরও অনেক কিছুর জন্য। যদিও ফাইল নামের শেষে তাদের প্রদর্শিত হবে এটি বিরল। (উদাহরণস্বরূপ এই সিস্টেমে ২.২
মিলিয়নের মধ্যে

3

ম্যানুয়ালটিতে বলা হয়েছে যে 'চ' বিকল্পটি কেবল 'নিয়মিত ফাইল' এর বিপরীতে, পাইপ, সকেট বা ব্লক / চর ডিভাইস নয়, যার অর্থ আপনি ইতিমধ্যে সঠিক জিনিসটি করছেন।

   -type c
          File is of type c:

          b      block (buffered) special

          c      character (unbuffered) special

          d      directory

          p      named pipe (FIFO)

          f      regular file

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

          s      socket

          D      door (Solaris)

0

এটি বিশেষভাবে সংক্ষিপ্ত নয় তবে আপনি যদি এটিকে দ্রুত কল করার প্রয়োজন হয় তবে আপনি এটিকে স্ক্রিপ্ট বা উরফে পরিণত করতে পারেন। ইনপুট অ্যারে হিসাবে ls কমান্ডটি ব্যবহার করে, নালিতে প্রেরিত আউটপুট সহ ডিরেক্টরিগুলি বাদ দিতে প্রতিটি এন্ট্রি-তে ls -ld কল করুন এবং সফল হলে মূল ইনপুটটি প্রতিধ্বনিত হবে:

for list in `ls` ; do ls -ld $list | grep -v ^d > /dev/null && echo $list ; done ;

আপনি গ্রেপ এবং শর্তসাপেক্ষ আউটপুট, একই ফলাফলগুলি উল্টাতে পারেন:

for list in `ls` ; do ls -ld $list | grep ^d > /dev/null || echo $list ; done ;

\dev\null?!?!
manatwork


0

এটি কিছুটা পুরানো থ্রেড তবে কেবল ফাইল তালিকাভুক্ত করার সবচেয়ে পরিষ্কার উপায়।

ls -al | grep '^-' | awk '{print $9}'


1
touch "some file name"দ্রুত পাল্টা নমুনা দেখতে
জেফ শ্যাচলার

@ জেফ শ্যাচলার আপনার একটি বৈধ পয়েন্ট আছে। এরকম কিছু জন্য। ls -al | grep '^-' | awk '{ for(i=9; i<=NF; ++i) printf $i""FS; print "" }'এর মধ্যে ফাঁকা ফাঁকা ফাইলগুলি পরিচালনা করা উচিত।
আরজে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.