Это описано в исходном репозитории GitHub . Если вы используете homebrew
, вам просто нужно ввести $(brew --prefix)/opt/fzf/install
и настроить его так, как вам нравится. Сценарий создаст два файла и попросит вас обновить файлы конфигурации оболочки. Для всех других процедур установки (git clone, linux brew,... )посмотритеhttps://github.com/junegunn/fzf
$(brew --prefix)/opt/fzf/install ─╯
Downloading bin/fzf...
- Already exists
- Checking fzf executable... 0.18.0
Do you want to enable fuzzy auto-completion? ([y]/n) y
Do you want to enable key bindings? ([y]/n) y
Generate /Users/hans/.fzf.bash... OK
Generate /Users/hans/.fzf.zsh... OK
Do you want to update your shell configuration files? ([y]/n) y
Update /Users/hans/.bashrc:
- [ -f ~/.fzf.bash ] && source ~/.fzf.bash
+ Added
Update /Users/hans/.zshrc:
- [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
+ Added
Finished. Restart your shell or reload config file.
source ~/.bashrc # bash
source ~/.zshrc # zsh
Use uninstall script to remove fzf.
Не анализировать Ls . Кажется, это работает хорошо, но в сложных случаях это может не сработать.
С расширением параметров Bash:
for f in *.mp3; do mv -- "$f" "${f//[!0-9a-zA-Z.-]/_}"; done
С переименованием:
rename -- 's/[^0-9a-zA-Z.-]/_/g' *.mp3
Если у вас есть только стандартные инструменты POSIX и предполагается отсутствие символов новой строки в именах файлов,
for f in *.mp3; do
mv -- "$f" "$(printf '%s\n' "$f" | sed 's/[^0-9a-zA-Z.-]/_/g')"
done
Сzsh
:
autoload -Uz zmv # best in ~/.zshrc
zmv '(*).mp3' '${f//[^0-9a-zA-Z_.-]/_}'
В zsh
диапазоны основаны на значении кода, поэтому 0-9
включает только 0123456789 (, а не 0123456789٠١٢٣٤٥٦٧٨۰۱۲۳۴۵۶۷۸߀߁߂߃߄߅߆߇߈०१२३४५६७८০১২৩৪৫৬৭৮੦੧੨੩੪੫੬੭੮૦૧૨૩૪૫૬૭૮୦୧୨୩୪୫୬୭୮௦௧௨௩௪௫௬௭௮౦౧౨౩౪౫౬౭౮౸౹౺౻౼౽౾೦೧೨೩೪೫೬೭೮൦൧൨൩൪൫൬൭൮෦෧෨෩෪෫෬෭෮๐๑๒๓๔๕๖๗๘໐໑໒໓໔໕໖໗໘༠༡༢༣༤༥༦༧༨༪༫༬༭༮༯༰༱༳၀၁၂၃၄၅၆၇၈႐႑႒႓႔႕႖႗႘፩፪፫፬፭፮፯፰០១២៣៤៥៦៧៨៰៱៲៳៴៵៶៷៸᠐᠑᠒᠓᠔᠕᠖᠗᠘᥆᥇᥈᥉᥊᥋᥌᥍᥎᧐᧑᧒᧓᧔᧕᧖᧗᧘᧚᪀᪁᪂᪃᪄᪅᪆᪇᪈᪐᪑᪒᪓᪔᪕᪖᪗᪘᭐᭑᭒᭓᭔᭕᭖᭗᭘᮰᮱᮲᮳᮴᮵᮶᮷᮸᱀᱁᱂᱃᱄᱅᱆᱇᱈᱐᱑᱒᱓᱔᱕᱖᱗᱘⁰⁴⁵⁶⁷⁸₀₁₂₃₄₅₆₇₈⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ↅ↉①②③④⑤⑥⑦⑧⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓾⓿❶❷❸❹❺❻❼❽❿➀➁➂➃➄➅➆➇➉➊➋➌➍➎➏➐➑➓〇〡〢〣〤〥〦〧〨㉈㉉㉊㉋㉌㉍㉎㉏㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿㋀㋁㋂㋃㋄㋅㋆㋇㋉㋊㋋㍘㍙㍚㍛㍜㍝㍞㍟㍠㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㏠㏡㏢㏣㏤㏥㏦㏧㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾꘠꘡꘢꘣꘤꘥꘦꘧꘨꣐꣑꣒꣓꣔꣕꣖꣗꣘꤀꤁꤂꤃꤄꤅꤆꤇꤈꧐꧑꧒꧓꧔꧕꧖꧗꧘꧰꧱꧲꧳꧴꧵꧶꧷꧸꩐꩑꩒꩓꩔꩕꩖꩗꩘꯰꯱꯲꯳꯴꯵꯶꯷꯸012345678
, как в bash
в большинстве современных локалей )и a-z
толькоabcdefghijklmnopqrstuvwxyz
(не тысячи символов, которые другие оболочки будут соответствовать ), но это по-прежнему выполняется на посимвольной основе (, в отличие от того, что произошло бы, если бы вы переключились на локаль C в bash
, чтобы обойти предыдущую проблему, когда она работать с байтами и разбивать символы на байты, составляющие там кодировку для многобайтовых ).
Он также не блокируется байтами, не образующими допустимых символов в локали (, и эти байты будут соответствовать [^0-9a-zA-Z_.-]
), так что, в конце концов, результирующие файлы должны содержать только символы из 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.-
, а не -символ.
В bash
вы могли бы сделать что-то похожее с:
accepted_characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.-'
for f in *[^$accepted_characters]*.mp3; do
mv -i -- "$f" "${f//[^$accepted_characters]/_}"
done
(без гарантийzmv
).