como extrair o caminho do local do arquivo usando o shell [duplicado]

1

como extrair o local do caminho abaixo da string dada.

/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr

saída esperada.

/opt/oracle/app/oracle/product/12.1.0/bin

(ou)

/opt/oracle/app/oracle/product/12.1.0/bin/
    
por ABUL KASHIM 27.11.2014 / 08:22

2 respostas

4

Use o recurso de remoção de sufixo do shell

str=/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr
path=${str%/*}
echo "$path"

Em geral, ${parameter%word} remove word do final de parameter . No nosso caso, queremos remover a barra final e todos os caracteres que seguem: /* .

O acima produz:

/opt/oracle/app/oracle/product/12.1.0/bin

Use o nome do direccionador

dirname pode ser usado para remover o último componente de um caminho:

$ dirname -- "$str"
/opt/oracle/app/oracle/product/12.1.0/bin
    
por 27.11.2014 / 08:27
0
start cmd:> dirname "/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr"
/opt/oracle/app/oracle/product/12.1.0/bin

file_path="/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr"
dir_path_woslash="${file_path%/*}"
echo "$dir_path_woslash"
/opt/oracle/app/oracle/product/12.1.0/bin

shopt -s extglob
dir_path_wslash="${file_path%%+([^/])}"
echo "$dir_path_wslash"
/opt/oracle/app/oracle/product/12.1.0/bin/
    
por 27.11.2014 / 08:26