我对如何运作有点困惑dirs
。文档说:
目录
不带参数,打印目录堆栈的内容。使用命令将目录添加到此堆栈中
pushd
,并使用cd
或popd
命令删除目录。
Q1.我从不使用popd
Nor pushd
,但我注意到它dirs
会跟踪我去过的目录(对我来说这意味着,cd
添加,不删除,目录到堆栈中)
问题2使用 进行长时间会话后cd
,通常会dirs
打印一长串目录,但此列表首先打印最近的目录,并以最后一个目录结束,因此如果我有一个长列表,屏幕会滚动,我可以'不容易看到最新的目录集(通常是我最感兴趣的目录)。
如何以相反的顺序打印目录列表?
我尝试过dirs | sort -r
,但这不能正确对条目进行排序,例如我得到
20 /foo20/bar
2 /foo2/bar
19 ...
18
...
16
11
10
1
0
未排序的原件看起来像
1 /foo/bar
2 /foo2/bar
3 ...
..
9
10
11
..
20
21
..
30
答案1
sort
默认情况下,基于 ASCII 值进行排序,这将无法正确对具有不同位数的数字进行排序。您可以使用该-n
选项告诉它根据前导数值进行排序。
dirs -v | sort -nr
或者,由于 的输出dirs
已经排序,但您只想将其变为相反的顺序,您可以使用该tac
命令(相反cat
):
dirs -p | tac
答案2
我这样做cd +
,然后点击Tab查看并导航最近访问的目录列表,最新的目录位于顶部。
答案3
A1
你启用了吗AUTO_PUSHD
?
可以使用setopt autopushd
或来启用它set -N
。
这就是为什么cd
要添加到目录堆栈。
A2
我猜你是在跑步dirs -v
,不只是dirs
? (我认为-v
需要让它每行列出一个。)
为什么不只是dirs -v | head
?或者dirs -v | less
? (或者dirs | tac
正如 qqx 所建议的那样。)
答案4
如果您只是sort -r
按降序排列行,从第一个字符开始到每行的末尾进行整理。如果您想要“字母”排序,则需要将排序键限制为第二个字段:
dirs | sort -rk2,2
这指定了 (r) 逆序排序,排序 (k)ey 为字段二 (2) 至字段 (2)。默认情况下,字段以空格分隔。如果不是,您可以使用 指定分隔符-t
。
另一方面,如果您确实想按数字排序,请执行以下操作:
dirs | sort -rkn1,1