কমান্ড-লাইন ব্যবহার করে নামে একটি ফাইল সন্ধান করুন


182

আমি কমান্ড-লাইন ব্যবহার করে কোনও ফাইলের অবস্থান নির্ধারণ করতে চাই। আমি চেষ্টা করেছি:

find . -type f -name "postgis-2.0.0"

এবং

locate postgis-2.0.0

কোন লাভ নেই। ফাইলের ডিরেক্টরি নির্ধারণের জন্য আদেশটি কী, তার নাম সরবরাহ করা হয়েছে?


2
locateকমান্ড জরিমানা, শুধু locatedb প্রথম আপডেট করতে, কমান্ড ব্যবহার করেupdatedb
thucnguyen

যদি এটি ইতিমধ্যে ইনস্টল করা থাকে তবে নতুন ফাইলের নাম postgis-2.0.0আর নাও থাকতে পারে । সাধারণত প্যাকেজ পরিচালকদের মাধ্যমে ইনস্টলেশনের পরে এক্সিকিউটেবলগুলি কোনও $PATHফোল্ডারে থাকত , which postgisঅবস্থানটি দেখার চেষ্টা করুন । যদি এটি কিছুই না ফেরায় তবে কেবলমাত্র আপনাকে নিজের ফাইল ফাইলটি সন্ধান করতে হবে।
sdkks

উত্তর:


231

find ~/ -type f -name "postgis-2.0.0"পরিবর্তে চেষ্টা করুন।

ব্যবহার .করা কেবলমাত্র বর্তমান ডিরেক্টরি অনুসন্ধান করবে। ~/আপনার সম্পূর্ণ হোম ডিরেক্টরি অনুসন্ধান করবে (সম্ভবত আপনি এটি যেখানে ডাউনলোড করেছেন)। আপনি যদি wgetরুট হিসাবে ব্যবহার করেন তবে এটি সম্ভবত অন্য কোথাও হতে পারে যাতে আপনি /পুরো ফাইল সিস্টেমটি অনুসন্ধান করতে পারেন ।

গুডলাক


1
ওহ ইয়ে আমি wgetরুট হিসাবে ব্যবহার করেছি তাই /কাজ ধন্যবাদ
Sam007

আরও তথ্যের জন্য এই লিঙ্কটি পরীক্ষা করুন help.ubuntu.com/commune/find
habibun

আমি পেয়েছি: / ব্যবহারকারী / ব্যবহারকারী নাম // লাইব্রেরি / সংরক্ষিত অ্যাপ্লিকেশন স্টেট / com.bitrock.appinstaller.savedState: অনুমতি ত্রুটি অস্বীকার করেছে। এটি কমান্ডের প্রতিটি প্রয়োগে উপস্থিত হয়। কীভাবে এ থেকে মুক্তি পাবেন?
এডুয়ার্ড

29

আমি চেষ্টা করব:

sudo find / -type d -name "postgis-2.0.0"

দ্য . মানে কেবলমাত্র বর্তমান ডিরেক্টরিতে অনুসন্ধান করুন, আপনি যদি সত্যিই না জানেন তবে রুট থেকে সমস্ত কিছু অনুসন্ধান করা ভাল। এছাড়াও, টাইপ -f অর্থ ফোল্ডার নয়, ফাইলগুলি অনুসন্ধান করা। যোগ করা sudoসমস্ত ফোল্ডার / সাবফোল্ডারগুলিতে অনুসন্ধানের অনুমতি দেয়।

আপনার সিনট্যাক্সটি locateসঠিক, তবে আপনাকে চালাতে হতে পারে

sudo updatedb

প্রথম। যে কারণেই হোক না কেন, locateযদিও আমি কখনই শুভ কামনা করি না ।

locateদ্বারা নির্মিত ফাইল এবং ডিরেক্টরিগুলির ডাটাবেস ব্যবহার করে updatedb। সুতরাং আপনি যদি একটি নতুন ফাইল ডাউনলোড করেন তবে আপনার updatedbফাইল এবং ডিরেক্টরিগুলির ডাটাবেস আপডেট হয়নি এমন আরও সম্ভাবনা রয়েছে। আপনি ইউটিলিটি প্রোগ্রাম ব্যবহার sudo updatedbকরার আগে ব্যবহার করতে পারেন locateupdatedbসাধারণত লিনাক্স সিস্টেমে প্রতিদিন একবার চালানো হয়।


14

লিনাক্স / ইউনিক্স সরঞ্জামগুলির মধ্যে একটি অন্যতম দরকারী সন্ধান।

চেষ্টা find . -type d | grep DIRNAME


গ্রেপ ওভার-নাম ব্যবহার করে এখানে কোনও সুবিধা আছে?
ট্রাইহার্ডার

@oooooo আমি নিচে আমার উত্তরে একটি কারণ যোগ
zanbri


12

অন্যান্য উত্তরগুলি ভাল, তবে আমি খুঁজে পাওয়া Permission deniedবিবৃতিগুলি আমাকে আরও পরিষ্কার উত্তর দেয় ( stderrচলমান না হওয়ার কারণে বাদ দেয় sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

কোথায়:

  • / আপনি যে ডিরেক্টরিটি থেকে নিজের অনুসন্ধানটি শুরু করতে চান তা পরিবর্তিত হতে পারে
  • fdআপনি যদি কোনও ফাইলের পরিবর্তে কোনও ডিরেক্টরি অনুসন্ধান করছেন তবে এটি প্রতিস্থাপন করা যেতে পারে
  • -iname-nameআপনি যদি সন্ধানটি কেস সংবেদনশীল হতে চান তবে এর সাথে প্রতিস্থাপন করা যেতে পারে
  • *অনুসন্ধান শব্দ গুলি আপনি অনুসন্ধান ওয়াইল্ডকার্ড চাই না বাদ দেওয়া যেতে পারে

একটি বিকল্প হ'ল:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

এই পদ্ধতিতে অনুসন্ধানের শব্দটি পুরো ফাইল পাথের যে কোনও জায়গায় মিলে গেলে ফলাফলগুলি ফেরৎ দেয় eg /home/postgis-2.0.0/docs/Readme.txt


2
অনুসন্ধানের জন্য রয়েছে -regexএবং -iregexস্যুইচ রয়েছে Regular Expressionsযা পাথের পাশাপাশি উল্লেখ করা পাবে। কোনও ফাইল ( -type f) যা কোনও আইটেম সন্ধান করার পরামর্শ তারপর grepআরও বেশি ব্যয়বহুল। Permission deniedযখন ব্যবহারকারী ফাইল বা ফোল্ডারগুলিতে অ্যাক্সেস না পান, sudoতখন অনুসন্ধানের আগে ব্যবহার করলে সমস্ত ফাইল দেখতে পাওয়া যাবে।
sdkks

1
রেজেক্স সুইচ সম্পর্কে জানতে ভাল, ধন্যবাদ।
জানব্রি

@ আজানব্রি ব্যবহার করুন -wholenameবা এর -iwholenameপরিবর্তে পাইপিং করুন grep
wjandrea

4

চেষ্টা find . -name "*file_name*"

  • যেখানে আপনি '।' (বর্তমান ডিরেক্টরিটি দেখুন) থেকে '/' (পুরো সিস্টেমটি দেখুন) বা '~ /' (হোম ডিরেক্টরিতে সন্ধান করুন) পরিবর্তন করতে পারবেন।

  • আপনি যদি কোনও মামলা সংবেদনশীল না চান তবে "-নাম" "" -নাম "" তে পরিবর্তন করতে পারবেন।

  • যেখানে আপনি "পরিবর্তন করতে পারেন FILE_NAME ঠিক ফাইলের নামের" (একটি ফাইল শুরু করা এবং যাই হোক না কেন সঙ্গে শেষ করতে পারেন)।


3

এটি ফাইলের অবস্থান নির্ধারণকে সহজ করতে হবে:

এটি আপনাকে ফাইলটির পুরো পথ দেবে

tree -f  / | grep postgis-2.0.0

গাছ ডিরেক্টরি-জাতীয় ফর্ম্যাটগুলিতে ডিরেক্টরিগুলির বিষয়বস্তু তালিকাভুক্ত করে। The -fগাছ বলে ফাইলের সম্পূর্ণ পাথ দিতে। যেহেতু আমাদের এর অবস্থান বা পিতামাতার অবস্থান সম্পর্কে কোনও ধারণা নেই, তাই ফাইল সিস্টেমের মূল থেকে /পুনরাবৃত্তভাবে নীচের দিকে অনুসন্ধান করা ভাল । তারপরে আমরা আমাদের শব্দটি হাইলাইট করার জন্য আউটপুটটি গ্রেপকে প্রেরণ করি,postgis-2.0.0


0

যদিও findকমান্ড সহজ উপায় যাও recursively ডিরেক্টরি ট্রি তর্ক হয়, সেখানে অন্যান্য উপায় আছে এবং বিশেষ করে দুই স্ক্রিপ্টিং ভাষা ডিফল্ট ভাবে উবুন্টু সঙ্গে আসা ইতিমধ্যে তা করার ক্ষমতা আছে।

সজোরে আঘাত

bash খুব সুন্দর globstarশেল অপশন রয়েছে যা ডিরেক্টরি গাছের পুনরাবৃত্তির জন্য অনুমতি দেয়। ./**/*প্রসারণের আইটেমটি কোনও ফাইল এবং এটিতে কাঙ্ক্ষিত পাঠ্য রয়েছে কিনা তা পরীক্ষা করে দেখার দরকার আমাদের :

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done 
./testdir/texts/postgis-2.0.0

পার্ল

পার্লের মডিউল রয়েছে যা ডিরেক্টরি গাছের পুনরাবৃত্ত ট্র্যাভারসাল সম্পাদন করতে দেয় এবং সাব্রোটিনের মাধ্যমে সেগুলিতে নির্দিষ্ট ক্রিয়া সম্পাদন করতে পারে। একটি ছোট স্ক্রিপ্টের সাহায্যে আপনি ডিরেক্টরি ট্রিকে অতিক্রম করতে পারেন, পছন্দসই স্ট্রিং যুক্ত অ্যারেগুলিতে থাকা ফাইলগুলিকে ধাক্কা দিতে পারেন এবং তারপরে এটি প্রিন্ট করতে পারেন:

#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;

my @wanted_files;
find(
     sub{ 
         -f $_ && $_ =~ $ARGV[0]  
               && push @wanted_files,$File::Find::name
     }, "."
);

foreach(@wanted_files){
    print "$_\n"
}

এবং এটি কীভাবে কাজ করে:

$ ./find_file.pl  "postgis-2.0.0"                                                       
./testdir/texts/postgis-2.0.0

পাইথন

পাইথন হ'ল অন্য স্ক্রিপ্টিং ভাষা যা উবুন্টু বিশ্বে খুব ব্যাপকভাবে ব্যবহৃত হয়। বিশেষত, এটিতে os.walk()মডিউল রয়েছে যা আমাদের উপরের মতো একই ক্রিয়াটি সম্পাদন করতে দেয় - ট্র্যাভার্স ডিরেক্টরি ট্রি এবং পছন্দসই স্ট্রিংযুক্ত ফাইলগুলির তালিকা অর্জন করে।

ওয়ান-লাইনার হিসাবে এটি করা যেতে পারে:

$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'                                                                         
['./testdir/texts/postgis-2.0.0']

সম্পূর্ণ স্ক্রিপ্টটি দেখতে এমন হবে:

#!/usr/bin/env python
import os;

for r,s,f in os.walk("."):
    for i in f:
        if "postgis-2.0.0" in i:
            print(os.path.join(r,i))

0

$ find . -type f | grep IMG_20171225_*

./03-05--2018/IMG_20171225_200513.jpg
কমান্ডের পরে findএকটি বিন্দু শুরুর পরে ডট দেয় ,
সুতরাং - বর্তমান ফোল্ডারটি,
নাম ফিল্টারের মাধ্যমে "পাইপযুক্ত" (= ফিল্টার করা)IMG_20171225_*

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