ls কমান্ড: আমি প্রতি ফাইলটিতে একটি পুনরাবৃত্ত পূর্ণ-পাথ তালিকা পেতে পারি?


493

আমি কীভাবে প্রতি-লাইন পথে পুনরাবৃত্তির জন্য ফ্ল্যাট তালিকাটি ছড়িয়ে দিতে এলএস পেতে পারি?

উদাহরণস্বরূপ, আমি কেবলমাত্র তাদের সম্পূর্ণ পাথ সহ ফাইলের একটি সমতল তালিকা চাই:

/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt

ls -a1 আমার যা প্রয়োজন তা প্রায় করি, তবে আমি পথের টুকরো চাই না, আমি পুরো পথ চাই path


এছাড়াও দেখুন: গাছ
dreftymac

উত্তর:


386

আপনি যদি সত্যিই ব্যবহার করতে চান ls, তবে এর ফলাফলটি awk ব্যবহার করে ফর্ম্যাট করুন:

ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'

5
@ ড্রেফটিম্যাক, যার অর্থ এটি উদ্দেশ্যমূলকভাবে বলতে গেলে আপনি যা লিখেছেন তা ইচ্ছাকৃতভাবে বা না, এর সঠিক উত্তর। হ্যাঁ, সম্ভবত এটিকে প্রশ্নের সঠিক উত্তর ছিল না যে আপনার আশা প্রকাশ করেন লিখিত আছে। এবং আমি যখন আপনার আরও বড় বিষয়টির সাথে একমত হই: "যখন জ্ঞানী চাঁদের দিকে ইঙ্গিত করে, বোকা আঙুলের দিকে তাকিয়ে থাকে" এটি কেবলমাত্র ন্যায়সঙ্গত যে সঠিকতা মূল্যায়নের জন্য আমরা সাবজেক্টিটিটির প্রভাবকে হ্রাস করব, বিশেষত যখন মানদণ্ডের কোনও সম্ভাব্য অস্পষ্টতা না থাকে
লার্চার

1
@ ড্রেফটিম্যাক, আমি আমার ভোট পরিবর্তন করতে পেরে খুশি হব, তবে এখন তা তালাবন্ধ হয়ে গেছে, আপনাকে প্রশ্নটি সম্পাদনা করতে হবে যাতে আমি ভোটটি আপডেট করতে পারি
লুর্সার

7
কেউ দয়া করে উপরের awkভাবগুলি ব্যাখ্যা করতে পারেন ?
মের্ট নুহোগলু

2
এই সমাধানটি ডিরেক্টরিগুলি বাদ দেয় না (প্রতিটি ডিরেক্টরি তার নিজস্ব লাইন পায়)
JayB

2
ধন্যবাদ। বিটিডব্লিউ, দ্রুত অনুলিপি এবং পেস্টের জন্য এটি 1 লাইনে ভাল লাগবে।
লিও উফিমটসেভ

567

ব্যবহার সন্ধান করুন:

find .
find /home/dreftymac

আপনি যদি কেবল ফাইলগুলি চান (ডিরেক্টরি, ডিভাইসগুলি বাদ দিন):

find . -type f
find /home/dreftymac -type f

2
এই সমাধানের মাধ্যমে lsপ্যারামিটারগুলি কি --sort=extension"খালাস" করতে পারে?
n611x007

প্রয়োজনীয় প্রাসঙ্গিক তথ্য প্রদর্শনের জন্য আপনি প্রিন্টফ আউটপুট ব্যবহার করতে পারেন (উদাহরণস্বরূপ। -প্রকার-প্রিন্টফ '% পি% ইউ \ n')
xsubira

এটি কি একটি ফল্গের সাথে ফর্ম্যাট করা যায়? অর্থাত। পাইথন পিপ্রিন্ট.প্রিন্ট (ফাইল)
নাথন

72

ls -ld $(find .)

আপনি যদি পরিবর্তনের সময় অনুসারে আপনার আউটপুটটি বাছাই করতে চান:

ls -ltd $(find .)


11
-বাশ: / বিন / এলএস: যুক্তি তালিকা খুব দীর্ঘ
jperelli

1
+1 12106 ফাইল নিয়ে আমার জন্য কাজ করেছে এবং আমি--sort=extensionls
n611x007

3
ধন্যবাদ। আমি নিজেই (সুন্দর এবং সংক্ষিপ্ত) সিনট্যাক্সটি ভেবে দেখিনি - আমি ব্যবহার করতাম find . -name "*" -exec ls -ld '{}' \;(যে ফাইলগুলির সংখ্যা যাই হোক না কেন এটি কাজ করে) তবে আপনার কমান্ডটি লেখার পক্ষে আরও খাটো;)
এসআরজি

1
ls -ld find (সন্ধান করুন) বিরতিতে যদি আমি একটি এনটিএফএস ডিস্ক তালিকাভুক্ত করি যেখানে ফাইলগুলির ফাঁকা স্থান রয়েছে: ls: অ্যাক্সেস করতে পারবেন না। / সিস্টেম: @ এসআরজি ওয়ার্ক দ্বারা উদ্ধৃতিগুলি সহ এমন কোনও ফাইল বা ডিরেক্টরি খুঁজে পাওয়া যায় না
kuz8

একটি সংক্ষিপ্ত বিকল্প (আপনার প্রয়োজনের উপর নির্ভর করে) হবে find . -ls
ইয়ানস

59

নিম্নলিখিত সহজ উপায় চেষ্টা করুন:

find "$PWD"

9
find "`pwd`"যদি পথটিতে ফাঁকা জায়গা বা অন্য কোনও বিশেষ অক্ষর থাকে।
মোস্তফা.0x

7
এটির চেয়ে আলাদা কীভাবে find .? -.-
সালমান ভন আব্বাস

7
@ স্যালম্যানপিকে আপনি যদি কোনও pwdসূচনা পথ শুরু করতে চান তবে তা পরম পাথগুলি মুদ্রণ করবে। যাইহোক, "এটি কীভাবে আলাদা find" ";-)
ইয়াকার্ট

44

সেরা আদেশ হ'ল: tree -fi

লিঙ্কগুলি না হলেও ফাইলগুলি ব্যবহার করার জন্য আপনাকে >আপনার আউটপুট থেকে সরিয়ে ফেলতে হবে :

tree -fi |grep -v \>

আপনি যদি প্রতিটি ফাইলের প্রকৃতি জানতে চান, (কেবলমাত্র ASCII ফাইলগুলি পড়ার জন্য) দু'টি দিয়ে while:

tree -fi | \
grep -v \> | \
while read first ; do 
    file ${first}
done | \
while read second; do 
    echo ${second} | grep ASCII
done

ধন্যবাদ, আমি জানতাম না tree!
ড্যান ফিলিমন

@ নাকিলন নিকটতম জিনিস কি? এটি কি একইভাবে আউটপুট প্রদর্শন করে? আপনি কীভাবে সহজেই একটি শর্ট কমান্ড দিয়ে অনুরূপ আউটপুট প্রদর্শন করবেন ?
om01

6
@ ওম01: অসক্সে এটি যেমন একটি কঠিন brew install tree, আপনি
হোমব্রিউ

আমি ফাইলগুলি একচেটিয়া তালিকাতে পারেনি। এটি সর্বদা ডিরেক্টরিগুলিও তালিকাভুক্ত করে। আমি এটা কিভাবে করবো?
kommradHomer

এটিকে আরও উঁচু করে রেট দেওয়া উচিত!
der_grund

44

ওহ, উত্তরগুলির একটি দীর্ঘ তালিকা। এটি অনেক সাহায্য করেছে এবং অবশেষে, আমি আমার নিজের তৈরি করেছি যা আমি খুঁজছিলাম:

ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করতে:

find "$PWD" -type f

একটি ডিরেক্টরি এবং এর উপ ডিরেক্টরিতে সমস্ত ডিরেক্টরি তালিকাভুক্ত করতে:

find "$PWD" -type d

একটি ডিরেক্টরি এবং এর উপ ডিরেক্টরিতে সমস্ত ডিরেক্টরি এবং ফাইল তালিকাভুক্ত করতে:

find "$PWD"

2
এবং এক্সটেনশান দ্বারা ফিল্টার করতে:find "$PWD" -type f | grep '\.json$'
কিলরোয়

2
গ্রেপ সহ পোস্ট-প্রসেসিংয়ের দরকার নেই, ফাইন্ডের মতো-নাম ব্যবহার করুন: "$ পিডাব্লুডি"-টাইপ এফ-নাম * .জসন সন্ধান করুন এবং আপনি তালিকাবদ্ধ ফাইলগুলি মুছতে চান: "" পিডাব্লুডি "-টাইপ এফ-নাম * .json -exec rm {} \; একইভাবে, আপনি যদি এটি অনুলিপি করতে চান তবে আরপিএমটি সিপি এবং গন্তব্য দিয়ে প্রতিস্থাপন করুন:-এক্সেক সিপি}} গন্তব্য
গডফাদার

18

আমি পুরো পথ সম্পর্কে জানি না, তবে আপনি -Rপুনরাবৃত্তির জন্য ব্যবহার করতে পারেন । বিকল্পভাবে, যদি আপনি বাঁক না হন তবে আপনি lsকেবল এটি করতে পারেন find *


16

এলএস ব্যতীত অন্য কোনও বাহ্যিক আদেশ ব্যবহার করা হচ্ছে না:

ls -R1 /path | 
  while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done


অজানা বিকল্প '-1'। বাতিল করা হচ্ছে।
ইলউ

15
du -a

কিছু সীমাবদ্ধ অ্যাপ্লায়েন্স শেলগুলির জন্য কার্যকর যেখানে সন্ধান / অবস্থান উপলব্ধ নয়।


1
কীভাবে আমি ফাইলাইজ উইথআউটআউটকে সরিয়ে ফেলতে পারি awk?
আর্নল্ড রোয়া


10

এটিকে জটিল করে তুলবেন না। আমি সবেমাত্র এটি ব্যবহার করেছি এবং একটি সুন্দর আউটপুট পেয়েছি:

ls -lR /path/I/need

3
ওপি পুরো পথটি চায় এবং অন্য কিছুই নয়। ls -lRএই লক্ষ্যটি পূরণ করতে পারে না।
কোডফোরস্টার

দুঃখিত, এটি এটি করে না
আরেহ বেইটজ 13'18

9

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

du

এটি যাইহোক, প্রতিটি ফোল্ডারে থাকা কিসের আকারটিও দেখায় আপনি কেবল ফোল্ডারের নাম আউটপুট করতে বিশ্রী ব্যবহার করতে পারেন:

du | awk '{print $2}'

সম্পাদনা- দুঃখিত দুঃখিত, আমার খারাপ। আমি ভেবেছিলাম এটি কেবল ফোল্ডারগুলির প্রয়োজন ছিল। ভবিষ্যতে যদি কারও প্রয়োজন হয় তবে আমি এটিকে এখানে রেখে যাচ্ছি ...


আকর্ষণীয়, কারণ এটি আমাকে স্টাফগুলি দেখায় যে আমি জানতাম না আমি জানতে চেয়েছিলাম - গুগলের মতো ধরণের পরামর্শ। দেখা যাচ্ছে, প্রতিটি ফাইলের জন্য কত জায়গা লাগে তা আমি জানতে পছন্দ করি।
জেক টরন্টো


9

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

find -D tree /fullpath/to-dir/ 

(বা এটি একটি টেক্সট ফাইলে সংরক্ষণ করার জন্য)

find -D tree /fullpath/to-dir/ > file.txt

3
ম্যাক ওএস 10.13.3 এ চেষ্টা করা হয়েছে। find: illegal option -- D
জয়ন্ত ভাওয়াল


6

এখানে একটি আংশিক উত্তর যা ডিরেক্টরিটির নাম দেখায়।

ls -mR * | sed -n 's/://p'

ব্যাখ্যা:

ls -mR * একটি ':' এ শেষ হওয়া সম্পূর্ণ ডিরেক্টরি নাম তালিকাভুক্ত করে, তারপরে সেই ডিরেক্টরিতে থাকা ফাইলগুলিকে আলাদাভাবে তালিকাবদ্ধ করে

sed -n 's/://p' একটি কোলনে শেষ হওয়া লাইনগুলি খুঁজে পায়, কোলনটি কেটে ফেলে লাইনটি মুদ্রণ করে

ডিরেক্টরিগুলির তালিকাটি পুনরুক্ত করে, আমাদের ডিরেক্টরিগুলিও সন্ধান করতে সক্ষম হওয়া উচিত। এখনও এটি নিয়ে কাজ করা। এক্সার্গসের মাধ্যমে ওয়াইল্ডকার্ড পাওয়া চ্যালেঞ্জ।


দুর্দান্ত উত্তর .. ঠিক আমার যা প্রয়োজন!
সেলভিন

5

একটি ls ডিরেক্টরি শেষে একটি ওয়াইল্ডকার্ড যুক্ত করা পুরো পথকে বাধ্য করে। এই মুহূর্তে আপনার কাছে এটি রয়েছে:

$ ls /home/dreftymac/
foo.txt
bar.txt
stackoverflow
stackoverflow/alpha.txt
stackoverflow/bravo.txt
stackoverflow/charlie.txt

পরিবর্তে আপনি এটি করতে পারেন:

$ ls /home/dreftymac/*
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow:
alpha.txt
bravo.txt
charlie.txt

দুর্ভাগ্যক্রমে এটি ডিরেক্টরিগুলির পুনরাবৃত্তিগুলির জন্য পুরো পাথটি মুদ্রণ করে না, সুতরাং এটি আপনি সন্ধান করছেন এমন সম্পূর্ণ সমাধান নাও হতে পারে।


এছাড়াও দুর্ভাগ্যক্রমে আপনি ওয়াইল্ডকার্ডের সাহায্যে sus করতে পারবেন না (কারণ ওয়াইল্ডকার্ডটি সাধারণ ব্যবহারকারী হিসাবে প্রসারিত)।
অ্যান্ড্রু লরিয়েন

4

আমি দেখতে অনেক উত্তর। এটি আমার, এবং আপনি যদি ম্যাকের সাথে কাজ করছেন তবে আমি বেশ কার্যকর বলে মনে করি।

আমি নিশ্চিত (আপনি জানেন কিছু "বান্ডেল" ফাইল আছে আছি .app , .rtfd , .workflow , ইত্যাদি)। এবং ফাইন্ডারের উইন্ডোটি দেখে তাদের মনে হয় একক ফাইল। কিন্তু তারা না। এবং $ lsবা $ findএগুলি ডিরেক্টরি হিসাবে দেখুন ... সুতরাং, যদি না আপনি তাদের বিষয়বস্তুগুলিও তালিকাভুক্ত করেন তবে এটি আমার পক্ষে কাজ করে:

find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"

অবশ্যই এটি কার্যকারী ডিয়ারের জন্য, এবং আপনি অন্যান্য বান্ডিলের এক্সটেনশনগুলি যুক্ত করতে পারেন (তবে সর্বদা /তাদের পরে থাকবেন)। বা অন্য কোন এক্সটেনশন যদি ছাড়া এর বান্ডেল না /

বরং আকর্ষণীয় " .lpdf/" (বহুভাষা পিডিএফ)। এটির সাধারণ .pdfএক্সটেনশন (!!) বা ফাইন্ডারে নেই। এর জন্য আপনি (বা এটি কেবলমাত্র 1 টি ফাইল গণনা করেন) pdfএবং একগুচ্ছ জিনিসপত্রের জন্য না ...


4

ls -lR আপনি যা খুঁজছিলেন তা হ'ল বা আমি সর্বনিম্ন ছিলাম। চিয়ার্স


ওপি পুরো পথটি চায় এবং অন্য কিছুই নয়। ls -lRএই লক্ষ্যটি পূরণ করতে পারে না।
হ্যাড্রিয়েন তোমা

3

ডিরেক্টরিটি যদি কোনও আপেক্ষিক পথ হিসাবে পাস করা হয় এবং আপনাকে সন্ধানের কল করার আগে এটিকে একটি পরম পথে রূপান্তর করতে হবে। নিম্নলিখিত উদাহরণে ডিরেক্টরিটি স্ক্রিপ্টের প্রথম পরামিতি হিসাবে পাস করা হয়:

#!/bin/bash

# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory

আপনার সিস্টেমে থাকলে readlinkআপনি এটি করতে পারেনdirectory=$(readlink -e $1)
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া।

সত্য, তবে সিডি / পিডাব্লুডি সংমিশ্রণ প্রতিটি সিস্টেমে কাজ করবে। readlinkওএস এক্স 10.5.8 এ -e বিকল্পটি সমর্থন করে না।
জন কেইস

3
tar cf - $PWD|tar tvf -             

এটি ধীর হলেও এটি পুনরাবৃত্তির সাথে কাজ করে এবং ডিরেক্টরি এবং ফাইল উভয়ই মুদ্রণ করে। আপনি যদি অন্য সমস্ত তথ্য / ডিরেক্টরি বাদ দিয়ে কেবল ফাইলের নাম চান তবে আপনি এটি awk / গ্রেপ দিয়ে পাইপ করতে পারেন:

tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"          

2
আপনি সহজেই ব্যবহার করতে পারেন: তার সিভিএফ / দেব / নাল $ পিডাব্লুডি
বিধি

2

@ ঘোস্টডগ 74৪: আপনার সমাধানের সাথে সামান্য টুইট করুন।
নিম্নলিখিত কোডটি তার সম্পূর্ণ পরম পথ দিয়ে ফাইল অনুসন্ধান করতে ব্যবহার করা যেতে পারে।

sudo ls -R / | awk '<br/>
/:$/&&f{s=$0;f=0}<br/>
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}<br/>
NF&&f{ print s"/"$0 }' | grep [file_to_search]

1

আমি ফাইলের নাম জানতাম তবে ডিরেক্টরিটিও চেয়েছিলাম।

$ পিডব্লিউডি | সন্ধান করুন fgrep ফাইলের নাম

ম্যাক ওএস 10.12.1 এ পুরোপুরি কাজ করেছে

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