විධාන රේඛාව භාවිතයෙන් නමක් අනුව ගොනුවක් සොයා ගන්න


209

විධාන රේඛාව භාවිතා කර ගොනුවක පිහිටීම තීරණය කිරීමට මම කැමතියි. මම උත්සාහ කර ඇත:

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

Answers:


261

find ~/ -type f -name "postgis-2.0.0"ඒ වෙනුවට උත්සාහ කරන්න .

භාවිතා කිරීමෙන් .වත්මන් නාමාවලිය පමණක් සොයනු ඇත. ~/ඔබගේ මුළු නිවාස නාමාවලියම සොයනු ඇත (ඔබ එය බාගත කළ ස්ථානයට). ඔබ wgetroot ලෙස භාවිතා කළේ නම් , එය වෙනත් තැනක විය හැකි බැවින් ඔබට /සම්පූර්ණ ගොනු පද්ධතියම සෙවීමට භාවිතා කළ හැකිය .

වාසනාව


1
ඔහ්, මම wgetමූල ලෙස භාවිතා /
කළෙමි,

වැඩි විස්තර සඳහා මෙම සබැඳිය help.ubuntu.com/community/find
habibun

මට හමු විය: / පරිශීලකයින් / පරිශීලක නාමය // පුස්තකාලය / සුරකින ලද යෙදුම් තත්වය / com.bitrock.appinstaller.savedState: අවසරය ප්‍රතික්ෂේප කරන ලදි. එය විධානයෙහි සෑම ක්‍රියාත්මක කිරීමකදීම දිස් වේ. එයින් මිදෙන්නේ කෙසේද?
එඩ්වඩ්

32

මම උත්සාහ කරමි:

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

එම . වර්තමාන නාමාවලියෙහි පමණක් සෙවීම යන්නෙන් අදහස් වන්නේ, ඔබ සැබවින්ම නොදන්නේ නම් සියල්ල මුල සිට සෙවීම වඩාත් සුදුසුය. එසේම, -f ටයිප් කිරීම යනු ගොනු සෙවීම මිස ෆෝල්ඩර නොවේ. එකතු කිරීම sudoමඟින් සියලුම ෆෝල්ඩර / උප ෆෝල්ඩර වල සෙවීමට ඉඩ දෙයි.

සඳහා වන ඔබේ වාක්‍ය ඛණ්ඩය locateනිවැරදි නමුත් ඔබට ක්‍රියාත්මක වීමට සිදු විය හැකිය

sudo updatedb

පලමු. කුමන හේතුවක් නිසා හෝ මට කිසි විටෙකත් වාසනාව locateනැත.

locateවිසින් සාදන ලද ගොනු සහ නාමාවලි වල දත්ත සමුදාය භාවිතා කරයි updatedb. එබැවින් ඔබ නව ගොනුවක් බාගත කර ඇත්නම් updatedb, ගොනු සහ නාමාවලි වල දත්ත සමුදාය යාවත්කාලීන නොකිරීමට වැඩි ඉඩක් ඇත. උපයෝගිතා වැඩසටහන භාවිතා sudo updatedbකිරීමට පෙර ඔබට භාවිතා කළ හැකිය locate. updatedbසාමාන්‍යයෙන් දිනකට එක් වරක් ලිනක්ස් පද්ධති මත ධාවනය වේ.


14

සොයා ගැනීම වඩාත් ප්‍රයෝජනවත් ලිනක්ස් / යුනික්ස් මෙවලම් වලින් එකකි.

උත්සාහ කරන්න find . -type d | grep DIRNAME


Grep over-name භාවිතා කිරීමෙන් මෙහි වාසියක් තිබේද?
ට්‍රයිහාර්ඩර්

answeroooooo මම පහත මගේ පිළිතුරට හේතුවක් එකතු කළෙමි
zanbri

find plus grep මට වැඩ කළ එකම දෙයයි
malhal

14

අනෙක් පිළිතුරු හොඳයි, නමුත් 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"

සෙවුම් පදය සම්පූර්ණ ගොනු මාවතේ ඕනෑම තැනකට ගැලපෙන්නේ නම් මේ ආකාරයෙන් ප්‍රති results ල ලැබේ, උදා /home/postgis-2.0.0/docs/Readme.txt


2
ඇත -regexසහ -iregexසමග සෙවීම සඳහා මාරු Regular Expressionsමාර්ගය මෙන්ම සඳහන් සොයා දෙනු කරන,. ගොනුවක් ( -type f) වන ඕනෑම අයිතමයක් සොයා ගැනීමට යෝජනා කිරීම grepවඩා සම්පත් මිල අධිකය. Permission deniedපරිශීලකයාට ලිපිගොනු හෝ ෆෝල්ඩර වලට ප්‍රවේශය නොමැති විට සිදු වේ, sudoසොයා ගැනීමට පෙර භාවිතා කිරීමෙන් සියලු ගොනු බැලීමට සොයා ගැනීමට ඉඩ දෙනු ඇත.
sdkks

1
රීජෙක්ස් ස්විචයන් ගැන දැන ගැනීම සතුටක්, ස්තූතියි.
zanbri

anzanbri පයිප්ප භාවිතා කිරීම -wholenameහෝ -iwholenameභාවිතා කිරීම වෙනුවට grep.
wjandrea

5

උත්සාහ කරන්න find . -name "*file_name*"

  • එහිදී ඔබට '.' (වත්මන් නාමාවලිය දෙස බලන්න) '/' (සමස්ත පද්ධතිය දෙස බලන්න) හෝ '~ /' (නිවාස නාමාවලිය දෙස බලන්න) ලෙස වෙනස් කළ හැකිය.

  • ඔබට කිසිදු සිද්ධියක් සංවේදී වීමට අවශ්‍ය නැතිනම් "-name" "-iname" ලෙස වෙනස් කළ හැකිය.

  • එහිදී ඔබට " file_name " (ආරම්භ කළ හැකි හා අවසන් විය හැකි ගොනුවක්) ගොනුවේ හරියටම නමට වෙනස් කළ හැකිය.


3

මෙය ගොනුව ස්ථානගත කිරීම සරල කළ යුතුය:

මෙය ඔබට ගොනුවට සම්පූර්ණ මාර්ගය ලබා දෙනු ඇත

tree -f  / | grep postgis-2.0.0

ගස වැනි ආකෘතියකින් නාමාවලි වල අන්තර්ගතය ගස ලැයිස්තුගත කරයි. මෙම -fගොනුව වෙත සම්පූර්ණ මාර්ගය දෙන්න ගස පවසනවා. එහි පිහිටීම හෝ මව් ස්ථානය ගැන අපට කිසිම අදහසක් නැති නිසා, ගොනු පද්ධති මූලයෙන් /පුනරාවර්තනව පහළට සෙවීම හොඳය . අපගේ වචනය ඉස්මතු කිරීම සඳහා අපි ප්‍රතිදානය grep වෙත යවමු,postgis-2.0.0


0

අතර findවිධාන ඇත්තෙන් වෙනසට භාජනය බහලුම ගස තරණය කිරීමට පහසුම ක්රමය වන්නේ, වෙනත් ක්රම ඇත, විශේෂයෙන් පෙරනිමියෙන් උබුන්ටු සමග එන පිටපත් භාෂා දෙකක් දැනටමත් එසේ කිරීමට හැකියාව ඇත.

bash

bashglobstarඩිරෙක්ටරි ගසෙහි පුනරාවර්තන ගමන් කිරීමට ඉඩ සලසන ඉතා හොඳ ෂෙල් විකල්පයක් ඇත. අප කළ යුත්තේ ./**/*පුළුල් කිරීමේ අයිතමය ගොනුවක් ද යන්න සහ එහි අපේක්ෂිත පෙළ අඩංගු ද යන්න පරීක්ෂා කිරීම පමණි:

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

පර්ල්

පර්ල් සතුව Find මොඩියුලය ඇත, එමඟින් ඩිරෙක්ටරි ගසෙහි පුනරාවර්තන ගමන් කිරීමට ඉඩ සලසයි, සහ සබ්ට්‍රවුටින් හරහා ඒවාට නිශ්චිත ක්‍රියා සිදු කරයි. කුඩා ස්ක්‍රිප්ටයක් සමඟ, ඔබට ඩිරෙක්ටරි ගස හරහා ගමන් කළ හැකිය, අපේක්ෂිත නූල් අඩංගු ගොනු අරාව තුළට තල්ලු කළ හැකිය, ඉන්පසු එය මුද්‍රණය කරන්න:

#!/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
විධානයෙන් පසු DOT ලබා දෙයි findආරම්භක ලක්ෂ්‍යයක් සඳහන් කිරීම,
එබැවින් - වත්මන් ෆෝල්ඩරය,
නල පෙරණය හරහා “පයිප්ප” (= පෙරීම)IMG_20171225_*

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.