我经常在一个大~/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 find
或https://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,就会放弃并转到下一个子目录。.gitignore
ddd/
find(1)