#ff #file-search #find #directory #name #pattern #search-pattern

app find-files

Find Files (ff) 工具递归地搜索指定目录中(默认为当前目录,如未提供)与指定正则表达式模式匹配的文件

8 个版本

使用旧的Rust 2015

0.1.8 2019年9月6日
0.1.7 2019年9月5日
0.1.6 2019年3月4日
0.1.4 2019年2月28日

#1208 in 文件系统

42 每月下载量

Unlicense OR MIT

67KB
414

Find Files (ff)

Build Status Version info

Find Files (ff) 工具递归地搜索指定目录中(默认为当前目录,如未提供)与指定正则表达式模式匹配的文件。

双许可下MITUNLICENSE

截图

Screenshot

安装

发布页面下载您平台上的最新预编译可执行文件 ff 二进制文件。

如果您是Rust程序员,使用cargo install find-files下载并安装ff命令。要更新到较新版本,请使用--force标志。

基准测试结果

$ hyperfine                                \
    --warmup 3                             \
    --export-markdown benchmark-results.md \
    "find . -iregex '.*[0-9]\.jpg$'"       \
    "find . -iname '*[0-9].jpg'"           \
    "fd -HI '.*[0-9]\.jpg$'"               \
    "ff .*[0-9]\.jpg$"

Benchmark #1: find . -iregex '.*[0-9]\.jpg$'
  Time (mean ± σ):      42.8 ms ±   5.5 ms    [User: 11.7 ms, System: 30.1 ms]
  Range (min … max):    31.2 ms …  56.9 ms    48 runs

Benchmark #2: find . -iname '*[0-9].jpg'
  Time (mean ± σ):      60.8 ms ±   7.2 ms    [User: 27.9 ms, System: 31.4 ms]
  Range (min … max):    44.0 ms …  76.2 ms    37 runs

Benchmark #3: fd -HI '.*[0-9]\.jpg$'
  Time (mean ± σ):      18.8 ms ±   5.3 ms    [User: 14.9 ms, System: 19.9 ms]
  Range (min … max):    11.2 ms …  41.6 ms    96 runs

Benchmark #4: ff .*[0-9]\.jpg$
  Time (mean ± σ):      18.7 ms ±   4.6 ms    [User: 15.7 ms, System: 22.5 ms]
  Range (min … max):    11.7 ms …  30.4 ms    123 runs

Summary
  'ff .*[0-9]\.jpg$' ran
    1.00 ± 0.37 times faster than 'fd -HI '.*[0-9]\.jpg$''
    2.29 ± 0.63 times faster than 'find . -iregex '.*[0-9]\.jpg$''
    3.25 ± 0.88 times faster than 'find . -iname '*[0-9].jpg'
命令 平均[ms] 最小…最大[ms]
find. -iregex'.*[0-9]\.jpg$' 42.8 ± 5.5 31.2…56.9
find. -iname'*[0-9].jpg' 60.8 ± 7.2 44.0…76.2
fd-HI '.*[0-9]\.jpg$' 18.8 ± 5.3 11.2…41.6
ff.*[0-9]\.jpg$ 18.7 ± 4.6 11.7…30.4

表:benchmark-results.md

注意:有时,fdff快约1 ms2 ms

用法

USAGE:
    ff [FLAGS] [OPTIONS] <PATTERN> [ROOT_PATH]

FLAGS:
    -s, --case-sensitive       Search case sensitively. By default, files are
                               searched case insensitively.
    -D, --exclude-dir-paths    Exclude paths from the search result which are
                               directories and not files.
    -h, --help                 Prints help information
    -G, --ignore-gitignore     Ignore searching files and directories specified
                               in .gitignore. By default, the files and
                               directories specified in .gitignore are included
                               in the search results.
    -H, --ignore-hidden        Ignore searching hidden files and directories. By
                               default, hidden files and directories are
                               included in the search results.
    -V, --version              Prints version information

OPTIONS:
    -x, --exclude <exclude>    Exclude files and directories matching this
                               regular expression from the search results.
    -L, --level <level>        Recursively search only given level directories
                               deep. By default no depth restriction is imposed.
                               A value of 0 would always yield zero results. A
                               value of 1 searches for the direct children in
                               the given path.
    -j, --threads <threads>    The approximate number of threads to use. A value
                               of 0 (which is the default) results in thread
                               count set to available CPU cores.

ARGS:
    <PATTERN>      Find files whose name (path) matches this substring or
                   the regular expression.
    <ROOT_PATH>    Path to the directory to search files inside.[default:
                   `$PWD`]

示例

使用ff搜索文件有无数种可能性。以下示例仅展示了冰山一角。

  • 列出当前工作目录中匹配article字符串的文件路径。

    ff article
    
  • 列出扩展名为.png.PNG的文件。

    ff png$
    
  • 列出具有严格 .PNG 扩展名的文件。

    ff -s PNG$
    
  • 搜索各种图像文件。

    ff "\.(png|jpg|jpeg|gif|svg)$"
    
  • 列出路径匹配 controllers 字符串的文件。

    ff controllers
    
  • ./spec 目录中搜索 .js 文件。

    ff \.js ./spec
    
  • 搜索预期位于隐藏 .git 目录内,且名称包含 commit 或类似内容的文件。

    $ ff git.*commit
    
    ./.git/COMMIT_EDITMSG
    # omitted other results
    
  • 在搜索结果中不显示隐藏文件和目录。

    ff something -H
    
  • 在搜索结果中不显示那些在 .gitignore 中列出的文件和目录。

    ff src/.*js$ -G
    

    在上述命令中如果没有 -G (--ignore-gitignore) 标志,它默认也会包括 node_modules 等目录的结果。

  • 不显示仅是目录而非实际文件的路径。

    $ ff -D user
    
    ./app/models/user.rb
    ./app/models/user/address.rb
    ./specs/models/user_spec.rb
    ./specs/models/user/address_spec.rb
    

    在上述命令中如果没有 -D (--exclude-dir-paths) 标志,它也会在结果中包含匹配的目录路径,如下所示。

    $ ff user
    
    ./app/models/user.rb
    ./app/models/user
    ./app/models/user/address.rb
    ./specs/models/user_spec.rb
    ./specs/models/user
    ./specs/models/user/address_spec.rb
    
  • 排除(省略)与提供的可选排除正则表达式模式匹配的文件和目录。

    ff rb$ app/controllers -x /(audit|admin|sso|api)/
    

    上述命令将显示相对 app/controllers 目录内所有以 rb 结尾的文件的路径,排除匹配 /(audit|admin|sso|api)/ 模式的路径。

  • 限制在给定路径中搜索不超过3层深度。

    ff -L 3 .js$
    

依赖项

~5–14MB
~144K SLoC