বর্তমান ডিরেক্টরি সম্পর্কিত পাথ সহ লিনাক্স সি এল এলিতে পুনরাবৃত্তভাবে ফাইলগুলি তালিকাবদ্ধ করুন List


224

এটি এই প্রশ্নের অনুরূপ , তবে আমি বর্তমান ডিরেক্টরিটির সাথে সম্পর্কিতটি ইউনিক্সে অন্তর্ভুক্ত করতে চাই। আমি যদি নিম্নলিখিতটি করি:

ls -LR | grep .txt

এটি সম্পূর্ণ পাথ অন্তর্ভুক্ত করে না। উদাহরণস্বরূপ, আমার নিম্নলিখিত ডিরেক্টরি কাঠামো রয়েছে:

test1/file.txt
test2/file1.txt
test2/file2.txt

উপরের কোডটি ফিরে আসবে:

file.txt
file1.txt
file2.txt

আমি কীভাবে এটি স্ট্যান্ডার্ড ইউনিক্স কমান্ড ব্যবহার করে বর্তমান ডিরেক্টরি সম্পর্কিত পাথগুলি অন্তর্ভুক্ত করতে পারি?


4
এটি কেবল দেখায় যে এলএস এই বৈশিষ্ট্যটি অনুপস্থিত।
অর্জুন সিঙ্গরি

1
এই সমস্ত সমাধানগুলির প্রয়োজন findবা এটি লজ্জাজনক tree। আমি একটি অ্যান্ড্রয়েড ডিভাইস নিয়ে চলেছি যেখানে আমার কাছে কেবল উপস্থিত রয়েছে lsএবং অন্যান্য সরঞ্জামগুলির মধ্যে
একটিও নেই

উত্তর:


304

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

find . -name \*.txt -print

GNU ব্যবহার করা সিস্টেমগুলিতে, বেশিরভাগ জিএনইউ / লিনাক্স বিতরণগুলির মতো, আপনি প্রিন্টটি ছেড়ে দিতে পারেন।


11
... এবং এই বিষয়টির জন্য আপনি '' ছেড়ে যেতে পারেন।
অ্যাডাম মিটস

7
পরম পাথের জন্য, ব্যবহার করুনfind $(pwd) -name \*.txt
Zags

2
যদি প্যাটার্নের ডিরেক্টরিটির অংশ থাকে তবে -path "*docs/*.txt"পরিবর্তে নামটি ব্যবহার করা উচিত -name-wholenameএকই রকম-path
ড্যাশসি

9
-type fডিরেক্টরিগুলি, প্রতীকী লিঙ্কগুলি নয়, কেবল ফাইলগুলি ফেরত দেওয়ার জন্য ব্যবহার করুন
ব্যবহারকারী

2
-name "*.txt"হবে না মেলে file.TXT- সবসময় ব্যবহার -iname "*.txt"পরিবর্তে যা কেস-অসংবেদী।
সিসিপিজ্জা

73

(সম্পূর্ণ পাথ) এবং (কোনও প্রবিষ্টকরণ লাইন নেই ) treeসহ, ব্যবহার করুন :-f-i

tree -if --noreport .
tree -if --noreport directory/

তারপরে grepআপনি যা চান তা ফিল্টার করার জন্য ব্যবহার করতে পারেন।


কমান্ডটি পাওয়া না গেলে আপনি এটি ইনস্টল করতে পারেন:

RHEL / CentOS এবং ফেডোরা লিনাক্সে ট্রি কমান্ড ইনস্টল করতে নিম্নলিখিত কমান্ডটি টাইপ করুন:

# yum install tree -y

আপনি যদি ডেবিয়ান / উবুন্টু ব্যবহার করেন তবে আপনার টার্মিনালে মিন্ট লিনাক্স নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

$ sudo apt-get install tree -y

2
কেবলমাত্র ফাইলগুলির তালিকা তৈরি করতে এবং ফোল্ডারগুলি বাদ দিতে কোনও সেটিং?
thebugfinder

25

ব্যবহার করে দেখুন find। আপনি ম্যান পেজে একেবারে দেখতে পারেন তবে এটি এর মতো সাজানো:

find [start directory] -name [what to find]

আপনার উদাহরণের জন্য তাই

find . -name "*.txt"

আপনি যা চান তা আপনাকে দেওয়া উচিত



5

এটি কৌশলটি করে:

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

তবে এটি পার্সিংয়ের সাথে "পাপ" করার মাধ্যমে এটি করে ls, যদিও, এটি জিএনইউ এবং ঘোস্টস্ক্রিপ্ট সম্প্রদায়ের দ্বারা খারাপ ফর্ম হিসাবে বিবেচিত হয়।


2
@ ক্যাফেবে: ফলাফলগুলি বিশ্লেষণ করা নিষিদ্ধ হিসাবে বিবেচিত হয় lsকারণ এটি সাধারণত বাগগুলি নিয়ে যায়। প্রশ্নে বাক্যটি এটিকে কল করার চেষ্টা করছিল। এটিতে একটি রসিকতা ছিল যা আমি সরিয়েছি।
অ্যাডাম কাটজ

4
DIR=your_path
find $DIR | sed 's:""$DIR""::'

'সেড' সমস্ত 'অনুসন্ধান' ফলাফল থেকে 'আপনার_পথ' মুছে ফেলবে। এবং আপনি 'ডিআইআর' পাথ সম্পর্কিত ieve


এটি ঠিক আমার প্রয়োজন তবে এটি এখনও আমার জন্য পুরো পথটি ছড়িয়ে দেয়?
v3nt

1
অ্যাস্টোস্ট্রোফ - সন্ধান / টিএমপি ব্যবহার করবেন না সেড এস: "/ টিএমপি" :: | আরও
কাইরেন ডিকসন

4

ফাইন্ড কমান্ডটি ব্যবহার করে কাঙ্ক্ষিত ফাইলগুলির প্রকৃত পুরো পাথ ফাইলের নাম পেতে, এটি পিডব্লুডি কমান্ডের সাহায্যে ব্যবহার করুন:

find $(pwd) -name \*.txt -print

1

এখানে একটি পার্ল লিপি:

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if ($_ =~ /^\s+/);
        if ($_ =~ /(^\w+(\/\w*)*):/)
        {
            $tmppath = $1 if defined $1;    
            next;
        }
        print "$tmppath/$_";
    }
}

sub main()
{
        my @lines = ();

    while (<>) 
    {
        push (@lines, $_);
    }
    format_lines(\@lines);
}

main();

ব্যবহার:

ls -LR | perl format_ls-LR.pl

এটি একটি ভয়ানক পার্ল প্রোগ্রাম। এটি যতটা প্রয়োজন তার চেয়ে সম্ভবত এটি 2-3 বার দীর্ঘ এবং জটিল।
ব্র্যাড গিলবার্ট

1

আপনি শেল ফাংশন তৈরি করতে পারেন, যেমন আপনার .zshrcবা .bashrc:

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

প্রথমটি একক ফাইলগুলিতে কেবল স্পষ্টতই কাজ করবে।


1

আপনার ফাইল সিস্টেমে "ফাইলের নাম" নামে পরিচিত ফাইলটি মূল ডিরেক্টরি থেকে অনুসন্ধান শুরু করে "/"। "ফাইলের নাম"

find / -name "filename" 

1

আপনি যদি বিশদটি সংরক্ষণ করতে চান তবে আপনার আউটপুটে ফাইলের আকার ইত্যাদির সাথে এলটি আসে তবে এটি কাজ করা উচিত।

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

1

ইন মাছ শেল, আপনি recursively সব PDF গুলি তালিকাভুক্ত করতে, বর্তমান ডিরেক্টরির মধ্যে বেশী সহ এই করতে পারেন:

$ ls **pdf

আপনি যদি কোনও ধরণের ফাইল চান তবে কেবল 'পিডিএফ' সরান।


0


লক্ষ্যযুক্ত ডিরেক্টরিতে নির্দেশিত ls কমান্ডটি ব্যবহার করে আপনি প্রথমে এই কার্যকারিতাটি প্রয়োগ করতে পারেন । পরে ফাইন্ড কমান্ড ব্যবহার করে ফলাফলটি ফিল্টার করুন। আপনার কেস থেকে এটি মনে হচ্ছে - সর্বদা ফাইলের নামটি একটি শব্দ দিয়ে শুরু হয় file***.txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

0

মাইকেসে, ট্রি কমান্ড সহ

আপেক্ষিক পাথ

tree -ifF ./dir | grep -v '^./dir$' | grep -v '.*/$' | grep '\./.*' | while read file; do
  echo $file
done

পরমপথ

tree -ifF ./dir | grep -v '^./dir$' | grep -v '.*/$' | grep '\./.*' | while read file; do
  echo $file | sed -e "s|^.|$PWD|g"
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.