ආදේශක කාඩ් ගැළපුම මත පදනම්ව වත්මන් සහ උප ෆෝල්ඩරවල ඇති සියලුම ලිපිගොනු නැවත නැවත සොයා ගන්නේ කෙසේද?


1916

ආදේශක කාඩ් ගැළපුම මත පදනම්ව වත්මන් සහ උප ෆෝල්ඩරවල ඇති සියලුම ලිපිගොනු නැවත නැවත සොයා ගන්නේ කෙසේද?

Answers:


2785

ඒ සඳහා සොයා ගැනීම භාවිතා කරන්න :

find . -name "foo*"

findආරම්භක ලක්ෂ්‍යයක් අවශ්‍ය වන අතර .(තිත) වත්මන් නාමාවලියට යොමු කරයි.


22
මෙය ලිනක්ස් ලෙස ටැග් කර ඇති බව මම දනිමි, නමුත් මෙය සඳහන් කිරීම වටී: ලිනක්ස් නොවන වෙනත් * නික්ස් ප්‍රභේද සඳහා මාර්ගය අවශ්‍ය වේ. ලිනක්ස් වලදී, ඔබට තිත භාවිතා කිරීමට අවශ්‍ය නම් මාර්ගය අත්‍යවශ්‍ය නොවේ.
අයිලන්ඩ්කෝ

4
Foo "foo *" මඟින් "foo" සමඟ ආරම්භ වන සියලුම ලිපිගොනු සොයා ගැනීමට සොයා ගනී. එය ඔහුගේ ආදර්ශය පමණි. Gpio සමඟ ආරම්භ වන සියලුම ගොනු සොයා ගැනීමට ඔබට "gpio *" භාවිතා කළ හැකිය, නැතහොත් gpio1 නම් වූ සියලුම ගොනු සොයා ගැනීමට "gpio1" භාවිතා කළ හැකිය.
schumacher574

31
"foo *" උපුටා දැක්වීම් වල ඇති බව සලකන්න, එබැවින් එය සොයා ගැනීමට පෙර කවචය එය පුළුල් නොකරයි. ඔබ එසේ කළා නම් find . foo*, foo*එය පුළුල් වන අතර එය සොයා ගැනීමට සමත් වනු ඇත.
ග්‍රින්ච්

36
" "පුනරාවර්තන සෙවීම සඳහා ඉතා අවශ්‍ය වන අවධාරණය කිරීම වටී .
වෙස්ටර්න්ගන්

3
එසේම ප්‍රයෝජනවත්: ඔබට අවසර නොමැති (හෝ වෙනත් දෝෂ) නාමාවලි පිළිබඳව දැනුම් දීමට ඔබට අවශ්‍ය නැතිනම් ඔබට කළ හැකියfind . -name "foo*" 2>/dev/null
ජොබ්බෝ

224

Grep තුළට සොයා ගැනීම බොහෝ විට වඩාත් පහසු ය; අත්තනෝමතික ආදේශක ගැලපීම් සඳහා නිත්‍ය ප්‍රකාශනවල පූර්ණ බලය එය ඔබට ලබා දෙයි.

උදාහරණයක් ලෙස, ගොනු නාමයේ ඇති "foo" අක්ෂර සංවේදී නොවන වචන සහිත සියලුම ගොනු සොයා ගැනීමට:

~$ find . -print | grep -i foo

58
findද ඇත -iname, -regexසහ -iregexකිරීමට ගිනි අඟුරුවල නිසා, නඩුව-අසංවේදී ආදේශක, regex, සහ නඩුව-අසංවේදී regex ගැලපෙන කොඩි grepඅනවශ්ය වේ.
iobender

7
මම හිතන්නේ නැහැ එය අනවශ්‍ය වීම ගැන, නමුත් වඩා පහසු වීම ගැන.
එලියා ලින්

1
කෙසේ වෙතත්, grep -v වෙත නල මාර්ගයෙන් ඔබට අවශ්‍ය නොවන ඇතුළත් කිරීම් ඉවත් කිරීම සඳහා සරල නූල් හෝ රීජෙක්ස් භාවිතා කළ හැකිය.
door_number_three

3
@iobender - කනගාටුවට කරුණක් නම්, සෑම පද්ධතියකටම findඑම විකල්පයන්ට සහාය දෙන විධානයක් නොලැබෙන බව අත්දැකීමෙන් ඔබට පැවසිය හැකිය . සමහර විට grepඑකම විකල්පය බවට පත්වේ.
ලාමා මහතා

150

find රටාවකට ගැලපෙන සියලුම ගොනු සොයා ගනු ඇත:

find . -name "*foo"

කෙසේ වෙතත්, ඔබට පින්තූරයක් අවශ්ය නම්:

tree -P "*foo"

මෙය උපකාරී වේ යැයි සිතමු!


18
brew install treeමැක් ඕඑස්එක්ස් භාවිතා කරන්නන් සඳහා apt-getස්ථාපනය කර ඇත
ඩෙබ්‍රයිඩ්

1
මැකෝස් සියෙරා හි පරීක්ෂා කර, '--print' -> 'සොයා ගන්න. නම "* foo" --print '. superuser.com/questions/177289/searching-mac-through-terminal
john-salib


40
find -L . -name "foo*"

අවස්ථා කිහිපයකදී, සංකේතාත්මක නාමාවලි සම්බන්ධතා හැසිරවීමට මට -L පරාමිතිය අවශ්‍ය වී තිබේ. පෙරනිමියෙන් සංකේතාත්මක සබැඳි නොසලකා හරිනු ලැබේ. එවැනි අවස්ථා වලදී මම ඩිරෙක්ටරිය උප ඩිරෙක්ටරියකට වෙනස් කර රටාවට ගැළපෙන ගොනුව දකින නමුත් ගොනු නාමය නැවත ලබා නොදෙන බැවින් එය තරමක් ව්‍යාකූල විය. -L භාවිතා කිරීමෙන් එම ගැටළුව විසඳේ. සොයා ගැනීම සඳහා සංකේතාත්මක සම්බන්ධක විකල්පයන් වන්නේ -P -L -H


1
එල් ස්විචය ඉතා ප්රයෝජනවත් වේ. බොහෝ විට පරිශීලකයාට යටින් පවතින නාමාවලි ගැන කිසිදු අදහසක් නැත, ඒවා මෘදු සම්බන්ධක හෝ සාමාන්‍ය නාමාවලි වේ. එබැවින් සැකයක් ඇත්නම්, L විකල්පය භාවිතා කිරීම සැමවිටම හොඳයි. අවම වශයෙන්, එය සෑම විටම මට උදව් කර ඇත.
රිටේෂ්

2
ඒක තමයි මට පිළිතුර. ස්තූතියි!
iedmrc

34

ඔබගේ කවචය නව ග්ලෝබිං විකල්පයකට සහය දක්වන්නේ නම් (පහත පරිදි සක්‍රීය කළ හැකිය shopt -s globstar), ඔබට මෙය භාවිතා කළ හැකිය:

echo **/*foo*

ඕනෑම ලිපිගොනු හෝ ෆෝල්ඩර නැවත නැවත සොයා ගැනීමට. මේ සඳහා Bash 4, zsh සහ සමාන ෂෙල් වෙඩි ඇත.


පුද්ගලිකව මට මෙම කවචයේ ක්‍රියාකාරිත්වය අර්ථ දක්වා ඇත:

f() { find . -name "*$1*"; }

සටහන: ඉහත පේළිය කෙලින්ම ෂෙල් එකට ඇලවිය හැකිය හෝ ඔබේ පරිශීලක ~/.bashrcගොනුවට එක් කළ හැකිය.

ටයිප් කිරීමෙන් මට ඕනෑම ලිපිගොනු සොයා ගත හැකිය:

f some_name

විකල්පයක් ලෙස ඔබට සරල වාක්‍ය ඛණ්ඩයක් සහිත fdඋපයෝගීතාවයක් භාවිතා කළ හැකිය , උදා fd pattern.


1
මෙය තනි මට්ටමකට යයි. මා සඳහා උප නාමාවලි වලට නැවත
නොපැමිණීම

3
Ron බ්‍රොන්චා ඔබ shopt -s globstarවිධාන මඟින් විස්තාරිත ග්ලෝබින් සක්‍රිය කළ යුතු බැවිනි . Bash, zsh සහ ඒ හා සමාන ෂෙල් වෙඩි සඳහා මෙය සහය දක්වයි.
kenorb

bash-3.2$ shopt -s globstarලබා දෙයිbash: shopt: globstar: invalid shell option name
draish

rewrewish ඔබේ බෑෂ් 4.x දක්වා ඉහළ නැංවිය යුතුයි
kenorb

echo * / * foo සොයා ගැනීමට වඩා අඩු වේගයකින්
ජොසෙෆ් ක්ලිමුක්

33

fd

බාග වෙලාවට, find සෙමෙන්, උත්සාහ කරයි fdඋපයෝගිතා - සරල සහ වේගවත් විකල්ප findරස්ට් ලියා.

වාක්‍ය ඛණ්ඩය:

fd PATTERN

නිරූපණය:

මුල් පිටුව: https://github.com/sharkdp/fd


18
අවුරුදු 9 කට ආසන්න කාලයක් තුළ SO හි පළමු වරට මම gif එකක් දුටුවෙමි. හොද වැඩක්!
ජෝෂුවා පින්ටර්

1
එම කාර්ය සාධන ප්‍රති results ල ඉතා යහපත් බව පෙනේ. ගෙදර හැදූ
බීම සඳහා

මාතෘකාවෙන් බැහැරව: නිරූපණය සඳහා svg ගොනුවක් සෑදීමට ඔබ භාවිතා කළ මෙවලම කුමක්ද?
aprodan

2
roaprodan ආදර්ශන රූපය GitHub වෙතින් පිටපත් කරන ලදි, නමුත් මම විශ්වාස කරන්නේ ඔවුන් භාවිතා කරන බවත් asciinemaපසුව GIF ආකෘතියට පරිවර්තනය කරන බවත්ය, නමුත් මට විශ්වාස නැත.
kenorb

1
ඇත්ත වශයෙන්ම එය SVG ආකෘතිය බැවින් බොහෝ විට asciicast2vectorභාවිතා කළ හැකිය.
kenorb

27
find <directory_path>  -type f -name "<wildcard-match>"

ආදේශක-ගැලපුමේදී ඔබට ගැලපෙන නූල උදා. * .C (සියලුම සී ගොනු සඳහා) ලබා දිය හැකිය.


1
ඔබගේ පිළිතුර මෙහි ඇති පළමු නිවැරදි දෙය නම් එය නිශ්චිතව දක්වා ඇති ලිපිගොනු පමණක් සෙවීමයි. වර්ගය නියම නොකරන අනෙක් ඒවා නාමාවලි නැවත ලබා දෙනු ඇත.
wilsotc

ඔබට "-type f" නාමාවලියක් සෙවීමට අවශ්‍ය නම් "-type d" ලෙස වෙනස් කළ හැකිය
XYZ_Linux

11

ඔයාට පාවිච්චි කරන්න පුළුවන්:

# find . -type f  -name 'text_for_search'

ඔබට REGX භාවිතය අවශ්‍ය නම් -iname

# find . -type f  -iname 'text_for_search'

9

පහත දැක්වෙන විධානය මඟින් වත්මන් සහ එහි උප ෆෝල්ඩර වල “රටාව” (උදාහරණයක් ලෙස) ඇති සියලුම ගොනු ලැයිස්තුගත කරනු ඇත.

find ./ -name "pattern"


8

පුනරාවර්තන ගොනුව සෙවීම සඳහා සුපුරුදු ක්‍රමය වන අතර බොහෝ අවස්ථාවන්හිදී ලබා ගත හැකිය

find . -name "filepattern"

එය ඔබ ස්ථානගත කර ඇති වත්මන් නාමාවලිය තුළ සිට ගොනු නාමයක් හෝ රටාවක් සඳහා පුනරාවර්තන ගමන් ආරම්භ කරයි. සොයා ගැනීමේ විධානය සමඟ, ඔබට විකල්ප ලැයිස්තුවක් බැලීමට ටයිප් කරන්න, ආදේශක කාඩ්පත් සහ විවිධ ස්විච භාවිතා කළ හැකිය

man find

හෝ ඔබේ පද්ධතියේ මෑන් පිටු නොමැති නම්

find --help

කෙසේ වෙතත්, පසුව සොයා ගන්නා වඩාත් නවීන හා වේගවත් මෙවලම් තිබේ, ඒවා ඔබේ සමස්ත ගොනු පද්ධතිය හරහා ගමන් කරමින් ඔබේ ලිපිගොනු සුචිගත කරයි, එවැනි එක් පොදු මෙවලමක් වන්නේ ස්ථානගත කිරීම හෝ ස්ථානගත කිරීම / ස්ථානගත කිරීම ය, එය ස්ථාපනය කරන්නේ කෙසේද යන්න පිළිබඳව ඔබේ මෙහෙයුම් පද්ධතියේ අත්පොත පරීක්ෂා කළ යුතු අතර, එය වරක් ස්ථාපනය කර ඇති විට එය දත්ත සමුදාය ආරම්භ කළ යුතුය, ස්ථාපන ස්ක්‍රිප්ට් ඔබ වෙනුවෙන් එය නොකරන්නේ නම්, එය ටයිප් කිරීමෙන් අතින් කළ හැකිය

sudo updatedb

තවද, කිසියම් විශේෂිත ගොනු වර්ගයක් සොයා බැලීමට එය භාවිතා කිරීම

locate filename

නැතහොත්, වත්මන් නාමාවලිය තුළ සිට ගොනු නාමයක් හෝ පැටර්ටරයක් ​​සෙවීමට, ඔබට ටයිප් කළ හැකිය:

 pwd | xargs -n 1 -I {} locate "filepattern"

එය එහි ගොනු දත්ත ගබඩාව හරහා සොයා බලනු ඇති අතර ඔබ ටයිප් කළ රටාවට ගැලපෙන මාර්ග නාම ඉක්මනින් මුද්‍රණය කරයි. ස්ථානගත කිරීමේ විකල්පයන්ගේ සම්පූර්ණ ලැයිස්තුව බැලීමට, ටයිප් කරන්න: locate --helpහෝman locate

මීට අමතරව, ක්‍රෝන් ජොබ් හරහා නියමිත වේලාවට එහි දත්ත සමුදාය යාවත්කාලීන කිරීම සඳහා ඔබට ස්ථානය වින්‍යාසගත කළ හැකිය, එබැවින් 1AM ට db යාවත්කාලීන කරන නියැදි ක්‍රෝන් මෙන් පෙනේ:

0 1 * * * updatedb

මෙම ක්‍රෝන් කාර්යයන් root මගින් වින්‍යාසගත කළ යුතුය, මන්ද යාවත්කාලීන කරන ලද අයට සම්පූර්ණ ගොනු පද්ධතිය හරහා ගමන් කිරීමට root වරප්‍රසාදය අවශ්‍ය වේ.


7

ගොනු සෙවීම සඳහා
find / -xdev -name settings.xml -> සම්පූර්ණ පරිගණකය
find ./ -xdev -name settings.xml -> වත්මන් නාමාවලිය සහ

දිගුව සහිත ගොනු සඳහා එහි උප නාමාවලිය

find . -type f -name "*.iso"

6

අප පුනරාවර්තනය වීමට යන විට ස්ථානගත කිරීම දැඩි ලෙස භාවිතා නොකිරීම ගැන මම පුදුම වෙමි.

වර්තමාන උනන්දුවක් දක්වන ෆෝල්ඩරයේ ඇති ලිපිගොනු ලැයිස්තුව ලබා ගැනීම සඳහා මම පළමුව "$ පීඩබ්ලිව්ඩී" සොයාගනු ඇත, පසුව මා කැමති පරිදි ඒවා මත ග්‍රෙප් ධාවනය කරන්න.

locate "$PWD" | grep -P <pattern>

ඇත්ත වශයෙන්ම, මෙය උපකල්පනය කරන්නේ යාවත්කාලීන කිරීම සිදු කර ඇති අතර දර්ශකය වරින් වර යාවත්කාලීන වන බවයි. මෙය සොයා ගැනීමක් ධාවනය කිරීමට වඩා එය සොයා ගැනීමට වඩා වේගවත් ක්‍රමයක් වන අතර එය ගසෙන් බැස යන්න. සම්පූර්ණත්වය සඳහා මෙය සඳහන් කිරීම. ගස ඉතා බර නොවේ නම්, සොයා ගැනීම භාවිතා කිරීමට විරුද්ධ කිසිවක් නැත.


locate "$PWD*.mp4" ඔබට මඟ හැරිය හැකි බව මතක් කිරීම සඳහාgrep
ජෙෆ්රි ගුහාව

5

පහත දැක්වෙන විධානය ඕනෑම ලිපිගොනු සෙවීමට උපකාරී වේ

1) නඩුව නොසලකා
2) ප්‍රති ult ලය අවසරයකින් තොරව ෆෝල්ඩර බැහැර කිරීම
3) මූලයෙන් හෝ ඔබ කැමති මාර්ගයෙන් සෙවීම. ඔබ කැමති මාර්ගය වෙනස් කරන්න / වෙනස් කරන්න.

වාක්‍ය ඛණ්ඩය:
-iname '' 2> & 1 | සොයා ගන්න grep -v "අවසරය ප්‍රතික්ෂේප කරන ලදි"

උදාහරණය

find / -iname 'C * .xml' 2> & 1 | grep -v "අවසරය ප්‍රතික්ෂේප කරන ලදි"

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"

1
මිහිපිට ඔබ ඒ සඳහා grep භාවිතා කරන්නේ ඇයි? find / -iname '*C*.xml' 2>/dev/null
Stderr

3

ඔබට ආදේශක කාඩ්පත සමඟ විශේෂ ගොනුවක් සෙවීමට අවශ්‍ය නම්, ඔබට පහත කේතය භාවිතා කළ හැකිය:

find . -type f -name "*.conf"

සෑම .conf ලිපිගොනු මෙතැනින් සෙවීමට ඔබට අවශ්‍ය යැයි සිතමු:

.සෙවීම මෙතැන් සිට ආරම්භ කිරීම (වත්මන් ස්ථානය)
-typeයන්නෙන් අදහස් කරන්නේ මෙහි ඇති ගොනුව (එෆ්) යන්නයි. * .conf නම්
-nameසහිත ගොනු සෙවීමට ඔබට අවශ්‍යය .


3

මෙය වත්මන් සහ උප නාමාවලිවල ඇති සියලුම ලිපිගොනු සොයනු ඇත, ඒවායේ රේඛා ගණන වෙන වෙනම මෙන්ම මුළුමනින්ම ගණනය කරයි:

find . -name "*.wanted" | xargs wc -l

2

භාවිත

find path/to/dir -name "*.ext1" -o -name "*.ext2"

පැහැදිලි කිරීම

  1. පළමු පරාමිතිය ඔබට සෙවීමට අවශ්‍ය නාමාවලියයි.
  2. පෙරනිමියෙන් findපුනරාවර්තනය සිදු වේ.
  3. මෙම -oසඳහා කි්රයා -or. එබැවින් ඉහත අදහස් කරන්නේ මෙම ආදේශක කාඩ්පත හෝ මෙය සොයන්න. ඔබට ඇත්තේ එක් රටාවක් පමණක් නම් අවශ්‍ය නොවේ -o.
  4. ආදේශක රටාව වටා මිල ගණන් අවශ්‍ය වේ.
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.