linux - 一旦有来自管道的输入,dmenu 如何显示输入?
问题描述
TL;博士
这是默认行为。
find ~/ -name *.git 2>/dev/null | dmenu
# Searches everything in home directory and shows output
耗时约1-2秒
我想要的是:
find ~/ -name *.git 2>/dev/null | less
# Show as soon as it finds result. How to get similar output in dmenu?
随着我电脑中的文件增加,这将需要更长的时间。
详细说明:
我正在dmenu
从一个find
大约需要 1-2 秒的命令中输入输入。dmenu
一旦管道中有一些输入,是否可以显示输入。因为这是管道的基本工作。似乎dmenu
要等到管道中有所有条目,以便用户可以从中进行搜索,这看起来也是合法的,但这仍然可以避免吗?我想dmenu
在缓冲区中有输入时立即运行。
解决方案
我找到了一些解决方法来减少对find
这里的时间。代替find
,locate
可以使用。所以命令就像
locate -r '/home'"$USER"'.*\.git$'
-r
接受输入一个正则表达式。此处的参数-r
过滤/home/$USER
. 这比使用find
.
捕捉使用locate
locate
使用本地数据库进行搜索。因此,只有在构建/更新本地数据库时,它才会按预期工作。
要更新数据库,请使用sudo updatedb
. 每当您添加/移动/删除文件(或本例中的目录)时,请记住更新数据库以locate
获得正确的结果。
小费
为避免每次
updatedb
(和其他常用命令)都输入密码,请通过执行并将路径添加到命令二进制位置的条目来将它们添加到sudoerssudo visudo
更新
我最近意识到为什么locate
在我可以简单地维护自己的数据库并将所有条目归类到dmenu
. 有了这个,我能够实现我所需要的。
# Make a temp directory
mkdir -p $HOME/.tmp
# Search for all git directories and store them in ~/.tmp/gitfies.
[ -e $HOME/.tmp/gitfiles ] || find $HOME/ -regex .*/\.git$ -type d 2>/dev/null > $HOME/.tmp/gitfiles
# cat this file into dmenu
cat $HOME/.tmp/gitfiles | dmenu
这为带有dmenu
. 这比在你需要更新本地数据库等时使用locate
as更好。locate
由于我们在运行时使用 过滤 git 文件locate
,因此它比这种情况慢一点。
我可以简单地创建一个别名来更新这个数据库,类似于sudo updatedb
,locate
通过
alias gitdbupdate="find $HOME/ -regex .*/\.git$ -type d 2>/dev/null > $HOME/.tmp/gitfiles"
请注意,我没有使用/tmp/
它,因为它不会在电源循环中持续存在。因此,我创建了自己的$HOME/.tmp/
目录。
推荐阅读
- node.js - 如何通过使用 node-windows 创建的 Windows 服务传递 dotenv 配置路径
- java - 如何在 Windows 中配置 Appium-Flutter-Driver?哪个IDE更可取?
- python - 增加元素 CUDA 内核的算术强度的技术
- curl - 即使证书附加为 --cert 并安装在受信任的证书中,Curl 也不会发送证书(证书长度为 0)
- javascript - Console.log() 不在异步函数中等待
- javascript - 如何隐藏下面的所有内容
html标签? - ios - 团队名称作为 Appstore 中的官方发布名称?
- laravel - 有人可以帮我建立 elequent 查询 laravel
- sql - 为什么必须在一个 sql server conn 上选择“信任服务器证书”以及“加密连接”,而在另一个上只选择“加密连接”?
- go - 多根设置