【发布时间】:2021-09-22 12:22:06
【问题描述】:
我只是想自动化一些过程,我需要能够格式化来自pass ls的输出
https://www.passwordstore.org 的列表命令是什么
当前输出如下所示:
➜ ~ pass ls
Password Store
├── README.md
├── folder
│ └── subfolder
│ └── subfolder2
│ └── key1
│ └── key2
│ └── key3
├── anotherfolder
│ ├── subfolder
│ │ └── subfolder2
│ │ └── subfolder3
│ │ └── key1
│ │ └── key2
│ │ └── key3
我希望输出看起来像:
➜ ~ pass ls | some magic sed/grep/replace/etc
folder/subfolder/subfolder2/key1
folder/subfolder/subfolder2/key2
folder/subfolder/subfolder2/key3
anotherfolder/subfolder/subfolder2/subfolder3/key1
anotherfolder/subfolder/subfolder2/subfolder3/key2
anotherfolder/subfolder/subfolder2/subfolder3/key3
我正在尝试使用 sed 这样做,但随着子文件夹级别的加深(例如文件夹/子文件夹/子文件夹/子文件夹/键),无法替换不断增加的空格/制表符
这是我目前正在尝试的:
pass ls | sed -e 's/├──[ \t]*/\\/g' | sed -e 's/│ └──[ \t]*/\\/g'
评论后编辑:
好像pass ls只是密码存储目录上的一个简单的tree命令,所以我可以在我的目录上运行find来实现我想要的上述格式
我试试,题目的范围可以改成:
可以产生上述格式的正确列表命令是什么?
【问题讨论】:
-
老实说,将
pass本身修补为具有设计为易于解析(JSON 等)的输出格式作为选项不是更简单更健壮吗?这样您就不必担心未来的版本会稍微改变格式并无意中破坏您的逻辑。 -
文档说它使用
tree(1)进行格式化,我认为这意味着您理论上可以在某处使用find的目录。 (该目录可能是pass内部的一个短暂的临时文件系统,在这种情况下pass本身需要提供接口。) -
嗯。如果它通过 PATH 查找找到
tree,这很容易覆盖,在运行期间暂时将运行find的您自己的tree版本放在 PATH 的首位... -
我很惊讶
pass还没有提供这样的输出,因为它声称遵循 Unix 哲学。 -
哦,我误读了
pass的工作原理;我在想整个商店都是一个 GPG 文件。我敢打赌,您完全可以不使用pass来执行find <yourdirectory> -type f之类的操作。