#file-path #month #find #directory #sorting #command-line-tool #day

bin+lib ex-cli

用于查找、筛选、排序和列出文件的命令行工具

10 个稳定版本

1.9.0 2024年7月27日
1.8.0 2024年6月29日
1.6.0 2024年5月25日
1.5.0 2024年4月25日
1.1.0 2023年10月24日

297文件系统

Download history 54/week @ 2024-04-26 2/week @ 2024-05-03 3/week @ 2024-05-17 147/week @ 2024-05-24 8/week @ 2024-05-31 4/week @ 2024-06-07 163/week @ 2024-06-14 14/week @ 2024-06-21 154/week @ 2024-06-28 51/week @ 2024-07-05 140/week @ 2024-07-26 8/week @ 2024-08-02

148 每月下载量

GPL-3.0-or-later

345KB
6.5K SLoC

Ex 目录列出工具

版本

  • 1.0.0
    • 初始版本。
  • 1.1.0
    • 在 Windows 上进行不区分大小写的匹配。
    • 以绝对路径显示链接。
    • 以文件或目录颜色显示链接。
    • 在 Bash 中使用 LS_COLORS 变量。
    • 接受多个 -t 选项。
  • 1.2.0
    • 从子目录中查找相对链接。
    • 以零大小和时间显示坏链接。
    • 使用 -tf 选项包括可执行文件。
  • 1.3.0
    • 使用 -od 选项按目录排序。
    • 使用 --debug 选项显示文件深度。
    • 使用 -i 选项进行其他错误修复。
  • 1.4.0
    • 使命令完成功能工作。
  • 1.5.0
    • 以美观的方式打印文件大小和时间。
    • 使用 -aa 选项可选地递归到隐藏目录。
  • 1.6.0
    • 使用 -i 选项更正父目录缩进。
  • 1.7.0
    • 根据本地时间而不是 UTC 查找最近文件。
    • 使用 -i 选项使用框线字符进行缩进。
    • 在目录链接后添加尾随正斜杠或反斜杠。
    • 不再使用 --debug 选项显示文件深度。
  • 1.8.0
    • 使用 --case 选项在 Windows 上强制进行区分大小写的匹配。
    • 使用 --no-case 选项在 Linux 上强制进行不区分大小写的匹配。
    • 使用短划线长选项名。
  • 1.9.0
    • 使用 --utc 选项以 UTC 显示文件时间。
    • 使用 --win-ver 选项在 Windows 上显示文件版本。

简介

Ex 是一个列出目录内容的命令行工具。因此,它被设计为 ls 命令的替代品(但更容易使用)。

  • The ls 命令在 Bash 中(但更容易使用)。
  • Bash 中的 find 命令(但更容易使用)。
  • Windows 中的 dir 命令(但功能更强大,输出更美观)。

它旨在与 POSIX 壳命令管道一起工作。例如

  • 如果写入控制台,则显示所有属性。
  • 如果写入管道或文件,则隐藏属性,并转义文件名。

默认情况下,它将在当前目录中查找文件,并以文件类型(d 表示目录,l 表示链接,- 表示常规文件)和权限(r 表示可读,w 表示可写,x 表示可执行,对于所有者、组和其它)以及大小、年龄和扩展名列出。目录也会通过尾部的路径分隔符进行标识。

~/example $ ex
drwxr-xr-x    0 B    1 day          files/
-rwxr--r--   10 B    2 month  .sh   find.sh

欢迎提出功能请求,但这是一个我在日常工作语言中无法使用的爱好项目,所以我更愿意自己完成所有开发。

功能

在子目录中查找文件

如果使用选项 -s--recurse 运行 Ex,则它将在子目录中查找文件。如果使用选项 -d--depth 运行,则它将在最小和最大深度之间查找文件,其中深度 0 对应于当前目录。

  • 使用 -s 在子目录中查找文件。
  • 使用 -d4-d-4 查找深度为 4 的文件。
  • 使用 -d2-4 查找深度为 2、3 或 4 的文件。
  • 使用 -d2- 查找深度为 2 及以上的文件。

它在 Bash 中使用路径分隔符 /,包括 Windows 上的 Git Bash。

~/example $ ex -s
-rwxr--r--   10 B    2 month  .sh   find.sh
drwxr-xr-x    0 B    1 day          files/
drwxr-xr-x    0 B    1 day          files/colours/
-rwxr--r--   20 B    3 month  .sh   files/colours/alpha.sh
-rw-r--r--   30 B    4 month  .txt  files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  files/colours/green.txt
-rw-r--r--   50 B    6 month  .txt  files/colours/red.txt
drwxr-xr-x    0 B    1 day          files/numbers/
lrwxr--r--   60 B    7 month  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999 KB   8 month  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--    0 B    9 month        files/numbers/ordinals -> /home/username/numbers/ordinals/
drwxr-xr-x    0 B    1 day          files/numbers/one two/
-rw-r--r--   70 B   10 month  .txt  files/numbers/one two/"three" 'four'.txt

它在 Windows 上使用路径分隔符 \\

C:\Users\username\example> ex.exe -s
-rwxrwxrwx   10 B    2 month  .sh   find.sh
drwxrwxrwx    0 B    1 day          files\
drwxrwxrwx    0 B    1 day          files\colours\
-rwxrwxrwx   20 B    3 month  .sh   files\colours\alpha.sh
-rw-rw-rw-   30 B    4 month  .txt  files\colours\blue.txt
-rw-rw-rw-   40 B    5 month  .txt  files\colours\green.txt
-rw-rw-rw-   50 B    6 month  .txt  files\colours\red.txt
drwxrwxrwx    0 B    1 day          files\numbers\
lrwxrwxrwx   60 B    7 month  .sh   files\numbers\count.sh -> C:\Users\username\numbers\count.sh
lrw-rw-rw-  999 KB   8 month  .gz   files\numbers\googolplex.gz -> C:\Users\username\numbers\googolplex.gz
lrw-rw-rw-    0 B    9 month        files\numbers\ordinals -> C:\Users\username\numbers\ordinals\
drwxrwxrwx    0 B    1 day          files\numbers\one two\
-rw-rw-rw-   70 B   10 month  .txt  files\numbers\one two\"three" 'four'.txt

它接受通配符,如 *.txt,并提供如 .txt 的快捷方式,以简化输入。

~/example $ ex -s .txt
-rw-r--r--   30 B    4 month  .txt  files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  files/colours/green.txt
-rw-r--r--   50 B    6 month  .txt  files/colours/red.txt
-rw-r--r--   70 B   10 month  .txt  files/numbers/one two/"three" 'four'.txt

在子目录中缩进文件

如果使用选项 ---indent 运行 Ex,则它将在子目录中缩进文件。

~/example $ ex -si
-rwxr--r--   10 B    2 month  .sh   find.sh
drwxr-xr-x    0 B    1 day          files
drwxr-xr-x    0 B    1 day           +- colours
-rwxr--r--   20 B    3 month  .sh    |   +- alpha.sh
-rw-r--r--   30 B    4 month  .txt   |   +- blue.txt
-rw-r--r--   40 B    5 month  .txt   |   +- green.txt
-rw-r--r--   50 B    6 month  .txt   |   \- red.txt
drwxr-xr-x    0 B    1 day           \- numbers
lrwxr--r--   60 B    7 month  .sh        +- count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999 KB   8 month  .gz        +- googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--    0 B    9 month             +- ordinals -> /home/username/numbers/ordinals/
drwxr-xr-x    0 B    1 day               \- one two
-rw-r--r--   70 B   10 month  .txt           \- "three" 'four'.txt

隐藏文件和目录

默认情况下,Ex 会隐藏

  • .bashrc 之类的隐藏文件。
  • .git 之类的隐藏目录。
  • Python 缓存目录 __pycache__

如果使用选项 ---all-files 运行,则它会显示隐藏文件和目录。

~/example $ ex -d1 -a
-rwxr--r--   10 B    2 month  .sh   find.sh
drwxr-xr-x    0 B    1 day          .hidden/
drwxr-xr-x    0 B    1 day          files/
drwxr-xr-x    0 B    1 day          files/colours/
drwxr-xr-x    0 B    1 day          files/numbers/

如果使用重复选项 - 运行,则它还会递归到隐藏目录中。

~/example $ ex -d1 -aa
-rwxr--r--   10 B    2 month  .sh   find.sh
drwxr-xr-x    0 B    1 day          .hidden/
-rwxr--r--   15 B    1 day    .dat  .hidden/password.dat
-rwxr--r--   15 B    1 day    .dat  .hidden/secret.dat
drwxr-xr-x    0 B    1 day          files/
drwxr-xr-x    0 B    1 day          files/colours/
drwxr-xr-x    0 B    1 day          files/numbers/

大小写敏感的文件名匹配

默认情况下,Ex 在 Linux 上使用大小写敏感的文件名匹配,在 Windows(包括 Git Bash)上使用不区分大小写的匹配以匹配文件系统。如果使用选项 --case--no-case 运行,则它将覆盖此行为。

按自然顺序排序文件

默认情况下,Ex 使用自然顺序对文件名进行排序。

~/ordered $ ex
-rw-rw-r--    0 B    1 year   .txt  file8.txt
-rw-rw-r--    0 B    1 year   .txt  file9.txt
-rw-rw-r--    0 B    1 year   .txt  file10.txt
-rw-rw-r--    0 B    1 year   .txt  file11.txt
-rw-rw-r--    0 B    1 year   .txt  file98.txt
-rw-rw-r--    0 B    1 year   .txt  file99.txt
-rw-rw-r--    0 B    1 year   .txt  file100.txt
-rw-rw-r--    0 B    1 year   .txt  file101.txt

按属性排序文件

默认情况下,Ex 在当前目录中先显示目录再显示文件,如果递归,则将目录及其子目录分组,并按文件名在这些组内排序。如果使用选项 -o--order 运行,它将根据选项对文件和目录进行排序。

  • 使用 -on 按文件名排序文件。
  • 使用 -oe 按扩展名排序文件。
  • 使用 -os 按大小(递增)排序文件。
  • 使用 -os- 按大小(递减)排序文件。
  • 使用 -ot 按时间(递增)排序文件。
  • 使用 -ot- 按时间(递减)排序文件。
  • 使用 -oest 先按扩展名排序,然后按大小排序,最后按时间排序文件。

例如

~/example $ ex -d2 -oes
drwxr-xr-x    0 B    1 day          files/
drwxr-xr-x    0 B    1 day          files/colours/
drwxr-xr-x    0 B    1 day          files/numbers/
lrw-r--r--    0 B    9 month        files/numbers/ordinals -> /home/username/numbers/ordinals/
drwxr-xr-x    0 B    1 day          files/numbers/one two/
lrw-r--r--  999 KB   8 month  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
-rwxr--r--   10 B    2 month  .sh   find.sh
-rwxr--r--   20 B    3 month  .sh   files/colours/alpha.sh
lrwxr--r--   60 B    7 month  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
-rw-r--r--   30 B    4 month  .txt  files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  files/colours/green.txt
-rw-r--r--   50 B    6 month  .txt  files/colours/red.txt

按名称排序文件

如果使用选项 -on 运行 Ex,它还会在括号中显示目录

~/example $ ex -s -on .sh
-rwxr--r--   20 B    3 month  .sh   alpha.sh (files/colours)
lrwxr--r--   60 B    7 month  .sh   count.sh (files/numbers) -> /home/username/numbers/count.sh
-rwxr--r--   10 B    2 month  .sh   find.sh

按时间过滤文件

默认情况下,Ex 不论文件和目录的年龄如何都显示。如果使用选项 -r--recent 运行,它将按修改时间过滤。

  • 使用 -rh 包括一小时内修改的文件。
  • 使用 -rd 包括一天内修改的文件。
  • 使用 -rw2 包括两周内修改的文件。
  • 使用 -rm6 包括六个月内修改的文件。
  • 使用 -ry10 包括十年内修改的文件。

例如

~/example $ ex -s -rm5
Start                5 month
----------------------------
-rwxr--r--   10 B    2 month  .sh   find.sh
drwxr-xr-x    0 B    1 day          files/
drwxr-xr-x    0 B    1 day          files/colours/
-rwxr--r--   20 B    3 month  .sh   files/colours/alpha.sh
-rw-r--r--   30 B    4 month  .txt  files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  files/colours/green.txt
drwxr-xr-x    0 B    1 day          files/numbers/
drwxr-xr-x    0 B    1 day          files/numbers/one two/

按类型过滤文件

默认情况下,Ex 不论类型如何都显示文件和目录。如果使用选项 -t--type 运行,它将按类型过滤。

  • 使用 -tf 包括文件。
  • 使用 -td 包括目录。
  • 使用 -tl 包括链接。

例如

~/example $ ex -s -td
drwxr-xr-x    0 B    1 day    files/
drwxr-xr-x    0 B    1 day    files/colours/
drwxr-xr-x    0 B    1 day    files/numbers/
drwxr-xr-x    0 B    1 day    files/numbers/one two/
~/example $ ex -s -tfl
-rwxr--r--   10 B    2 month  .sh   find.sh
-rwxr--r--   20 B    3 month  .sh   files/colours/alpha.sh
-rw-r--r--   30 B    4 month  .txt  files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  files/colours/green.txt
-rw-r--r--   50 B    6 month  .txt  files/colours/red.txt
lrwxr--r--   60 B    7 month  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999 KB   8 month  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--    0 B    9 month        files/numbers/ordinals -> /home/username/numbers/ordinals/
-rw-r--r--   70 B   10 month  .txt  files/numbers/one two/"three" 'four'.txt

显示总大小

如果使用选项 --total 运行 Ex,它还会显示总文件大小以及文件和目录的数量。

~/example $ ex --total files/numbers/
drwxr-xr-x    0 B    1 day          files/numbers/one two/
lrwxr--r--   60 B    7 month  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999 KB   8 month  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--    0 B    9 month        files/numbers/ordinals -> /home/username/numbers/ordinals/
----------------------------
Total         1 MB                  3 files 1 directory

只显示路径

默认情况下,Ex 显示所有文件属性(除非写入管道或文件),以及文件大小和时间的格式化打印。如果使用选项 -x--only-path 运行,它只显示目录和文件名。

~/example $ ex -sx
find.sh
files/
files/colours/
files/colours/alpha.sh
files/colours/blue.txt
files/colours/green.txt
files/colours/red.txt
files/numbers/
files/numbers/count.sh -> /home/username/numbers/count.sh
files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
files/numbers/ordinals -> /home/username/numbers/ordinals/
files/numbers/one two/
files/numbers/one two/"three" 'four'.txt

如果使用重复选项 -xx 运行,它显示所有文件属性(即使写入管道或文件),并禁用文件大小和时间的格式化打印,显示本地时区的时间。

~/example $ ex -sxx
-rwxr--r--       10  01-Nov-2023 00:00:00  .sh   find.sh
drwxr-xr-x        0  31-Dec-2023 00:00:00        files/
drwxr-xr-x        0  31-Dec-2023 00:00:00        files/colours/
-rwxr--r--       20  01-Oct-2023 00:00:00  .sh   files/colours/alpha.sh
-rw-r--r--       30  01-Sep-2023 00:00:00  .txt  files/colours/blue.txt
-rw-r--r--       40  01-Aug-2023 00:00:00  .txt  files/colours/green.txt
-rw-r--r--       50  01-Jul-2023 00:00:00  .txt  files/colours/red.txt
drwxr-xr-x        0  31-Dec-2023 00:00:00        files/numbers/
lrwxr--r--       60  01-Jun-2023 00:00:00  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999,999  01-May-2023 00:00:00  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--        0  01-Apr-2023 00:00:00        files/numbers/ordinals -> /home/username/numbers/ordinals/
drwxr-xr-x        0  31-Dec-2023 00:00:00        files/numbers/one two/
-rw-r--r--       70  01-Mar-2023 00:00:00  .txt  files/numbers/one two/"three" 'four'.txt

如果使用重复选项 -xx 和选项 -u--utc 运行,它还会以 UTC 显示文件时间。

~/example $ ex -sxxu
-rwxr--r--       10  01-Nov-2023 00:00:00Z  .sh   find.sh
drwxr-xr-x        0  31-Dec-2023 00:00:00Z        files/
drwxr-xr-x        0  31-Dec-2023 00:00:00Z        files/colours/
-rwxr--r--       20  30-Sep-2023 23:00:00Z  .sh   files/colours/alpha.sh
-rw-r--r--       30  31-Aug-2023 23:00:00Z  .txt  files/colours/blue.txt
-rw-r--r--       40  31-Jul-2023 23:00:00Z  .txt  files/colours/green.txt
-rw-r--r--       50  30-Jun-2023 23:00:00Z  .txt  files/colours/red.txt
drwxr-xr-x        0  31-Dec-2023 00:00:00Z        files/numbers/
lrwxr--r--       60  31-May-2023 23:00:00Z  .sh   files/numbers/count.sh -> /home/username/numbers/count.sh
lrw-r--r--  999,999  30-Apr-2023 23:00:00Z  .gz   files/numbers/googolplex.gz -> /home/username/numbers/googolplex.gz
lrw-r--r--        0  31-Mar-2023 23:00:00Z        files/numbers/ordinals -> /home/username/numbers/ordinals/
drwxr-xr-x        0  31-Dec-2023 00:00:00Z        files/numbers/one two/
-rw-r--r--       70  01-Mar-2023 00:00:00Z  .txt  files/numbers/one two/"three" 'four'.txt

显示绝对路径

默认情况下,Ex 显示相对路径(除非在命令行上提供绝对路径)。如果使用选项 -q--abs-path 运行,它显示绝对路径。

~/example $ ex -sq .txt
-rw-r--r--   30 B    4 month  .txt  /home/username/example/files/colours/blue.txt
-rw-r--r--   40 B    5 month  .txt  /home/username/example/files/colours/green.txt
-rw-r--r--   50 B    6 month  .txt  /home/username/example/files/colours/red.txt
-rw-r--r--   70 B   10 month  .txt  /home/username/example/files/numbers/one two/"three" 'four'.txt

显示 Windows 路径

默认情况下,在Windows的Git Bash中,Ex显示带有路径分隔符的目录/,将D:\Path转换为/d/Path;但有时需要生成Windows路径以便复制粘贴到其他程序中。如果使用选项-w--win-path运行,它将这样做

~/example $ ex -sqw .txt
-rw-rw-rw-   30 B    4 month  .txt  C:\Users\username\example\files\colours\blue.txt
-rw-rw-rw-   40 B    5 month  .txt  C:\Users\username\example\files\colours\green.txt
-rw-rw-rw-   50 B    6 month  .txt  C:\Users\username\example\files\colours\red.txt
-rw-rw-rw-   70 B   10 month  .txt  C:\Users\username\example\files\numbers\one two\"three" 'four'.txt

显示Windows版本

如果使用选项-v--win-ver运行,Ex将显示可执行文件和DLL文件的版本

C:\Users\username\bin> ex.exe -v
-rw-rw-rw-  123 KB   1 month  2.1.0.999   .exe  binary.exe
-rw-rw-rw-   45 KB   1 month  2.1.0.1001  .dll  library.dll
-rw-rw-rw-  678 B    1 month              .txt  README.txt

Shell命令管道

如果通过Bash将管道连接到命令或文件,Ex将隐藏属性并转义文件名

~/example $ ex -s .txt | cat
files/colours/blue.txt
files/colours/green.txt
files/colours/red.txt
files/numbers/one\ two/\"three\"\ \'four\'.txt

如果使用选项-z--null-path运行,它使用空字符作为分隔符

~/example $ ex -sz .txt | xargs -0 touch

命令行完成

如果使用选项--completion=bash运行Ex,它将生成一个Bash完成脚本,可以从.bashrc文件中调用

source <(/home/username/bin/ex --completion=bash)

如果使用选项--completion=ps运行Ex,它将生成一个PowerShell完成脚本,可以从PowerShell的$PROFILE文件中调用

C:\Users\username\bin\ex.exe --completion=ps | Out-String | Invoke-Expression

依赖项

~7–35MB
~507K SLoC