シェルを使用してファイルの場所からパスを抽出する方法

シェルを使用してファイルの場所からパスを抽出する方法

以下の文字列からパス位置を抽出する方法。

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

期待される出力。

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

(または)

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

答え1

シェルのサフィックス除去機能の使用

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

一般的に${parameter%word}。私たちの場合、最後のスラッシュと次の文字の両方を削除しようとしています。wordparameter/*

上記の結果は次のとおりです。

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

ディレクトリ名の使用

ディレクトリ名パスから最後のコンポーネントを削除するために使用できます。

$ dirname -- "$str"
/opt/oracle/app/oracle/product/12.1.0/bin

答え2

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/

関連情報