Zsh: dirs na ordem inversa

1

Estou um pouco confuso sobre como dirs funciona. A documentação diz:

dirs

With no arguments, print the contents of the directory stack. Directories are added to this stack with the pushd command, and removed with the cd or popd commands.

Q1. Eu nunca uso popd nem pushd , mas notei que dirs monitora os diretórios onde estive (o que, para mim, significa cd < strong> adiciona , não remove diretórios para a pilha)

Q.2 Após uma longa sessão usando cd , é comum que dirs imprima uma longa lista de diretórios, mas essa lista imprime o diretório mais recente primeiro e termina com o último diretório, então, se eu tiver uma lista longa, a tela rola, e não consigo ver facilmente o conjunto mais recente de diretórios (que normalmente são os que me interessam mais).

Como posso imprimir a lista de diretórios em ordem reversa?

Eu tentei dirs | sort -r , mas isso não classifica as entradas corretamente, por exemplo, Eu recebo

20 /foo20/bar
2  /foo2/bar
19 ...
18
...
16
11
10
1
0

Os originais não selecionados parecem

1 /foo/bar
2 /foo2/bar
3  ...
..  
9
10
11
..
20
21
..
30
    
por Amelio Vazquez-Reina 16.11.2012 / 20:07

4 respostas

2

A1

Você ativou AUTO_PUSHD ?

Pode ser ativado com setopt autopushd ou set -N .

Por isso, cd está adicionando à pilha de diretórios.

A2

Eu suponho que você esteja executando dirs -v , não apenas dirs ? (Eu acho que -v é necessário para listar um por linha).

Por que não apenas dirs -v | head ? Ou dirs -v | less ? (Ou dirs | tac como qqx sugere.)

    
por 17.11.2012 / 00:25
4

sort por padrão faz a classificação com base em valores ASCII, isso não classificará corretamente números com números variáveis de dígitos. Você pode usar a opção -n para ordenar a classificação com base em um valor numérico principal.

dirs -v | sort -nr

Ou, como a saída de dirs já vem classificada, mas você quer colocar isso em ordem inversa, pode usar o comando tac (que é cat no sentido inverso):

dirs -p | tac
    
por 16.11.2012 / 21:29
3

Eu faço cd + e então clico em Tab então veja e navegue na lista de diretórios visitados recentemente, com o mais recente no topo.

    
por 16.11.2012 / 21:29
2

se você simplesmente sort -r estiver organizando as linhas em ordem decrescente, agrupando do primeiro caractere até o final de cada linha. Você precisa restringir a chave de classificação ao segundo campo se quiser uma classificação "alfabética":

dirs | sort -rk2,2

Isto especifica uma ordenação do tipo (r) everse com o tipo (k) ey sendo o campo dois (2) através do campo (2). Por padrão, os campos são delimitados por espaços em branco. Se não estiverem, você pode especificar o separador com -t .

Se, por outro lado, você realmente quiser fazer o pedido numericamente, faça:

dirs | sort -rkn1,1
    
por 16.11.2012 / 21:10