是否有像“ls”这样的 CLI 工具,但它还显示有关目录的额外信息(例如 README.md 的第一行)

是否有像“ls”这样的 CLI 工具,但它还显示有关目录的额外信息(例如 README.md 的第一行)

我经常在一个大~/code目录中创建小项目作为单独的目录。然而,随着时间的推移,我忘记了这些目录的内容,不幸的是,dirname它还不足以破译用例。

有没有一种方法可以增强ls(或另一个实用程序的别名),同时显示有关每个项目的简短信息?我设想它会在项目目录中显示 README.md 中的几行以及目录名称。

答案1

没有这样的工具;但这是 UNIX,因此您可以轻松创建一个。 :-)


由于周围没有任何README.md文件,我将使用.gitignore每个子目录下的文件来打印第一行:

find . -type d -printf '%30f ==> ' -exec sed q {}/.gitignore \;

示例输出:

                   control-DBs ==> autogen.h
                         basic ==> flarp.exe
                    postgresql ==> libpgstore.a
                            ui ==> .DS_Store
                       plugins ==> *.*~

怎么运行的

  • -type d:我们仅查找子目录。
  • printf '%30f ==> '-printf接受一堆代码,用于打印有关文件的各种信息(从技术上讲,目录是一种文件) 正在处理。有足够的代码可以ls(1)使用更简单的选项来模拟输出。请参阅man findhttps://man7.org/linux/man-pages/man1/find.1.html完整列表;一些必备品是
    • %f: 基本名称
    • %s:大小(以字节为单位)
    • %m:权限(又名模式位)
  • -exec sed q {}/.gitignore \;:这里我们给出find(1)一个自定义命令来为正在处理的每个子目录执行。
    • {}代表文件的路径
    • sed q fff是打印文件“ fff”第一行的一种方法
    • \;告诉find(1)自定义命令结束的位置。

如果只是一些子目录.gitignore中有什么?

find . -type d -exec [ -e {}/.gitignore ] \; -printf '%30f ==> ' -exec sed q {}/.gitignore \;

我们再次求助-exec。假设当前正在处理的子目录名为“ ddd”;如果in 中[ -e ddd/.gitignore ]没有,那么将评估为 false 。一旦测试评估为 false,就会放弃并转到下一个子目录。.gitignoreddd/find(1)

相关内容