"ඩිරෙක්ටරියේ" "ක්රෝම්" පෙළ අඩංගු ලිපිගොනු සොයා ගැනීමට මම කැමතියි.
$ find . -exec grep chrome
find: missing argument to `-exec'
මම වැරදි කරන්නේ කුමක් ද?
find: Only one instance of {} is supported with -exec ... +
"ඩිරෙක්ටරියේ" "ක්රෝම්" පෙළ අඩංගු ලිපිගොනු සොයා ගැනීමට මම කැමතියි.
$ find . -exec grep chrome
find: missing argument to `-exec'
මම වැරදි කරන්නේ කුමක් ද?
find: Only one instance of {} is supported with -exec ... +
Answers:
ඔබට ;
( \;
ෂෙල් එක අර්ථ නිරූපණය කිරීමෙන් වලක්වා ගැනීම සඳහා මෙහි පැන ගොස් ඇත ) හෝ a +
සහ a {}
:
find . -exec grep chrome {} \;
හෝ
find . -exec grep chrome {} +
find
ක්රියාත්මක වන grep
අතර {}
සොයාගත් ගොනු නාම (ය) සමඟ ආදේශ කරනු ඇත . අතර වෙනස ;
සහ +
ඒ සමඟ ;
තනි grep
එක් එක් ගොනුව සඳහා විධානය සමඟ ඇති ෙහයින්ද ක්රියාත්මක වන +
බොහෝ ගොනු කළ හැකි ලෙස පරාමිතීන් ලෙස ලබා දී ඇත ලෙස grep
එකවර.
grep -ls
සොයා ගැනීමේ ඉදිකිරීම් ඇතුළත භාවිතා කරන්න .
find . -exec grep foo {} +
මේ ආකාරයට ප්රතිදානය ඔබට පෙන්වනු ඇත./dir/file.py:from foo import bar
find . -exec grep foo {} \;
මේ ආකාරයට ප්රතිදානය ඔබට පෙන්වනු ඇතfrom foo import bar
find . -exec grep -l foo {} +
මේ ආකාරයට ප්රතිදානය ඔබට පෙන්වනු ඇත./dir/file.py
find . -exec grep -l foo {} \;
මේ ආකාරයට ප්රතිදානය ඔබට පෙන්වනු ඇත./dir/file.py
මේ සඳහා ඔබ කිසිසේත් භාවිතා කිරීමට අවශ්ය නැත find
; වත්මන් නාමාවලියෙහි ඇති සියල්ල පිළිබඳ ගෝලීය ලැයිස්තුවකින් ගොනු විවෘත කිරීම හැසිරවීමට grep හට හැකිය:
grep chrome *
... හෝ ෆෝල්ඩරය සහ එය යටතේ ඇති සියල්ල සඳහා පුනරාවර්තන ලෙස:
grep chrome . -R
find
කළ grep
හැකි වේලාවට හඳුන්වා දීමෙන් ඔවුන්ට අවශ්ය ප්රමාණයට වඩා සංකීර්ණ කාරණා සෑදීමයි , නමුත් සමහර අවස්ථාවලදී පිටතට යාමට පෙර ලිපිගොනු ලැයිස්තුව සකස් කිරීම සඳහා සොයා ගැනීම භාවිතා කිරීම වඩාත් be ලදායී වනු ඇත. grep කිරීමට.
grep
එවැනි අවස්ථාවක හුස්ම හිර කරන්නේ නැත exec
.
find . | xargs grep 'chrome'
ඔබට ද කළ හැකිය:
find . | xargs grep 'chrome' -ls
පළමුවැන්න ඔබට ලිපිගොනු වල පේළි පෙන්වයි, දෙවැන්න ගොනු ලැයිස්තුගත කරයි.
කාලෙබ්ගේ විකල්පය පිළිවෙළකට, යතුරු එබීම් අඩුයි.
xargs
වන්නේ එහි ආදානය find
නිෂ්පාදනය නොකරන සුවිශේෂී ආකාරයකින් උපුටා දැක්වීම අපේක්ෂා කිරීමයි . ඒ නිසා find … | xargs …
ඔබ whitespace අඩංගු හෝ ගොනු නම් ඇති නම් වැඩ නැහැ \'"
.
find . | xargs -n1 -iX grep "X" 'chrome'
එමඟින් තර්ක එකවර පෝෂණය කර උපුටා දැක්විය හැකිය. නිසැකවම මෙය මෙම උදාහරණය හැසිරවීමට දරුණු ලෙස අකාර්යක්ෂම ක්රමයක් වන නමුත් සමහර අවස්ථාවල එය හොඳයි.
xargs
ලිනක්ස් ගොනු නාම සමඟ කටයුතු කිරීමට ඇති එකම 100% විශ්වාසදායක ක්රමය නම් find ... -print0 | xargs -0
, NUL බෙදුම්කරු ලෙස භාවිතා කිරීමයි. විකල්ප - xargs -d '\n'
නව රේඛාව බෙදුම්කරු ලෙස භාවිතා කිරීම, 99% විශ්වසනීයත්වය.
සොයා ගැනීම එක් ක්රමයක් වන අතර ඔබට උත්සාහ කළ හැක්කේ ඔබට කළ the_silver_searcher
යුත්තේ පමණි
ag chrome
එය සියලුම ලිපිගොනු වල ක්රෝම් සොයනු ඇත (උප නාමාවලි ඇතුළත් කරන්න) එය සොයා ගැනීමට වඩා වේගවත් වේ
මෙන්න මම සාමාන්යයෙන් find / exec භාවිතා කරන ආකාරය පිළිබඳ උදාහරණයක් ...
find . -name "*.py" -print -exec fgrep hello {} \;
මෙය සියලුම .py ගොනු සඳහා පුනරාවර්තව සොයනු ඇති අතර, එක් එක් ලිපිගොනු සඳහා ගොනු නාමය මුද්රණය කර ඇති අතර (එක් එක්) ගොනුවේ 'හෙලෝ' සඳහා fgrep ගේ. ප්රතිදානය පෙනේ (අද දින එකක් ධාවනය කර ඇත):
./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
find . -name "*.py" -exec fgrep -l hello {} \;
- එය ගැලපෙන ලිපිගොනු වල නම් මුද්රණය කරනු ඇත, වෙන කිසිවක් නැත
රේඛා වෙනුවට ලිපිගොනු ලැයිස්තුව බැලීමට:
grep -l "chrome" *
හෝ:
grep -r -l "chrome" .