Você pode usar find
sort
e head
para fazer isso
cd $(find /home/cg/root/2018/01/* -type d | sort -r | head -1)
deve fazer o truque
Eu quero ir no diretório com base no maior número de diretório.
Caminho: /home/cg/root/2018/01
. Dentro deste caminho eu tenho vários diretórios como abaixo
15
16
17
So on..
Nesse caso, o diretório mais alto é 17
, então quero mover no diretório 17
... Se um diretório chamado 18
existir, em seguida, você deseja ir em 18
.
Existe alguma maneira que possa ser feita usando o comando cd
?
Como:
cd /home/cg/root/2018/01/$(ls |tail -1)
Você pode usar find
sort
e head
para fazer isso
cd $(find /home/cg/root/2018/01/* -type d | sort -r | head -1)
deve fazer o truque
Isso fará isso
cd $(ls /home/cg/root/2018/01 | sort -n -r | awk 'NR==1 {print $1})
Usando uma matriz bash (temporária) dentro de uma função:
cdhighest() {
local dirs=(/home/cg/root/2018/01/*)
cd -- "${dirs[-1]}"
}
Em seguida, basta executar cdhighest
e você será direcionado para o diretório em / home / cg / root / 2018/01 que classifica por último.
Referência:
O que você parece ter que funcionar, exceto que ls
deve ser informado para listar o conteúdo do diretório correto. Mas não listaria os caminhos completos e há muitos outros detalhes. Além disso, as coisas listadas em Por que você não deve analisar a saída de ls (1)
Como o shell pode listar nomes de arquivos e, na verdade, os classifica, poderíamos usar apenas printf
com o glob:
$ cd "$(printf "%s\n" /home/cg/root/2018/01/*/ |tail -1)"
Claro, isso requer que os nomes dos diretórios não contenham novas linhas.
Você pode fazer isso de maneira simples.
cd /home/cg/root/2018/01; cd 'ls -r | head -n 1'
Tags cd-command