Cortar caminho para os primeiros quatro diretórios

0

Eu tenho vários projetos em que tenho que usar o mesmo comando. Os projetos sempre estão em

/home/[username]/public_html/[prjectname]/

Eu gostaria de executar este comando em todos os diretórios dos meus projetos, portanto, preciso conhecer minha base de projetos. Eu tentei ${path:0:20} , mas porque o comprimento da string do usuário e projectname varia. Eu só preciso conhecer as primeiras quatro partes do caminho .

** EDITAR **

De Stéphane Chazelas 'e Resposta do RudiC :

$ path=/home/[username]/public_html/[prjectname]/abc/xyz
$ echo "${path%"${path#/////}"}"
/home/[username]/public_html/[prjectname]/
No external command needed.

Obrigado!

    
por Eddy1015 23.10.2018 / 09:06

3 respostas

1

Você pode querer considerar (double) "expansão de parâmetro: Remover padrão de prefixo / sufixo correspondente":

$ path=/home/[username]/public_html/[prjectname]/abc/xyz
$ echo "${path%"${path#/*/*/*/*/}"}"
/home/[username]/public_html/[prjectname]/

Nenhum comando externo é necessário.

    
por 23.10.2018 / 13:27
2

Você já mencionou cut . Você acabou de definir o delimitador para / . A parte não intuitiva é que você precisa dos campos de 1 a 5, porque a parte antes do primeiro / também é contada como um campo (vazio).

echo /1/2/3/4/5/6/7 | cut -d/ -f1-5

O resultado é

/1/2/3/4
    
por 23.10.2018 / 09:16
0

Tente isso,

 find /path/to/dir -mindepth 4 -type d | cut -d"/" -f -5 | sort -u
  • type -d imprimirá apenas diretórios.
  • mindepth imprimirá os diretórios com no mínimo 4 subdiretórios.
  • -d"/" use / como delimitador para cortar
  • -f -5 corta tudo da quinta coluna
  • sort -u imprimirá caminhos de pasta exclusivos classificados.
por 23.10.2018 / 09:17