විධානය සොයන්න: නඩුව නොසලකා හරින්නේ කෙසේද?


185

මම විශාල ඩිරෙක්ටරි ධූරාවලියක් තුළ "WSFY321.c" ගොනුව සොයමි.
සාමාන්‍යයෙන් මම GNU සොයා ගැනීම භාවිතා කරමි : find . -name "WSFY321.c"
නමුත් මම එය නොදනිමි, එය ලොකු අකුරු, සිම්පල් හෝ දෙකම මිශ්‍ර විය හැකිය.

මෙම ගොනුව සොයා ගැනීමට ඇති පහසුම ක්‍රමය කුමක්ද?
ඊට වඩා හොඳ දෙයක් find . | grep -i "WSFY321.c"තිබේද?

Answers:


237

GNU මෑත සංස්කරණ findසතුව -inameනඩුව-අසංවේදී නම සෙවුම් සඳහා, කොඩි.

find . -iname "WSFY321.c"

7
එසේම, ඔබ විශේෂයෙන්ම ගොනු සොයන සිට ඔබ කළ හැකි බොහෝ විට කිනිතුල්ලන් තවත් යුවළක් සමග ඒ ලකුණු රැවුල -type fධජය එය inode නාමාවලියක් නම් නම දෙස නැති වුණහම ඒ නිසා. නමුත් එය ප්‍රශස්ත මට්ටමේ මට්ටමකි ...
ෂදූර්

සමහර රීජෙක්ස් සමඟ වැඩ කිරීම සඳහා ඔබට කළ හැකියfind . -iname \*WSFY321.c\* -type f
බෙන්ජ්

43

GNU සොයා ගැනීම හෝ එය ඇති වෙනත් සොයාගැනීම් සමඟ:

find . -iname 'WSFY321.c'

වෙනත් අනුවාද සමඟ:

find . -name '[Ww][Ss][Ff][Yy]321.[Cc]'

නැතහොත් මන්දගාමී නමුත් ටයිප් කිරීමට පහසු සම්මුතියක්:

find . -name '????321.c' | grep -i '/WSFY[^/]*$'

හෝ zsh වලින්:

print -rl -- **/(#i)WSFY321.c

@Gilles මෙම grepඅනුවාදය පමණක් ඉහළ නඩුව ෙපරහන්, සහ මට තේරෙන්නේ නෑ මේ '[^ /]' .. (නෑ /)
Peter.O

Il ගිල්ස් පළමු නඩුවේ තනි උපුටා දැක්වීම් (නිශ්චිත ගොනු නාමය) කිසිසේත්ම උපුටා දැක්වීම් නොමැතිව භාවිතා කිරීමට ඇති තර්කය කුමක්ද?
බර්න්හාර්ඩ්

@ පීටර්.ඕ බාෂ් අනුවාදයෙන් *පසුව නැත /. මම අදහස් කළේ grep -i. මම භාවිතා [^/]*කරනවාට වඩා .*ඔහුගේ නම සමඟ ආරම්භ නාමාවලි තුළ ඇති ගොනු අල්ලා ගැනීමට නොහැකි වූ නිසා ලෙස WSFY.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

6
Ern බර්න්හාර්ඩ් අනුකූලතාව.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

ස්තූතියි ගිලෙස්: මම කලින් අදහස් දැක්වීම වැරදි වාක්‍ය ඛණ්ඩයකින් මකා දැමූ අතර, සංශෝධිත අනුවාදය පරීක්ෂා කළෙමි, නමුත් එය * නොමැතිව ක්‍රියා නොකරයි (අනපේක්ෂිත හේතුවක් නිසා; මට අවම වශයෙන්). මෙම නඩුව-අසංවේදී විකල්පය තව දුරටත් ක්රියා: shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c... මම එය හැඳින්වේ ඒකයි සිතමු nocase glob : එය පමණක් glob (හෝ එය පෙනේ නිසා) යන සන්දර්භය තුළ ක්රියා කරයි.
පීටර්.ඕ

1

මැකෝස් සඳහා විසඳුම් දෙකක්:

GNU භාවිතා කිරීම find:

brew install findutils --with-default-names
# restart Terminal
find . -iname 'WSFY321.c'

GNU භාවිතා කිරීම sed:

brew install gnu-sed --default-names
# restart Terminal
find -name "$(sed 's|\([[:alpha:]]\)|[\U\1\L\1]|g' <<<'WSFY321.c')"

1
මැකෝස් සියෙරා හි -iname විකල්පය පෙරනිමියෙන් ලබා ගත හැකිය.
තෝමස් ඩබ්ලිව්
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.