経路指定を最長の共通プレフィックス+サフィックスに分解する

経路指定を最長の共通プレフィックス+サフィックスに分解する

2つのUnix絶対パスが与えられた場合メガネ図1に示すように、各仕様は、最も長い共通接頭辞と特定の接尾辞の連結に分解することができます。例えば、

/abc/bcd/cdf     -> /abc/bcd + cdf
/abc/bcd/chi/hij -> /abc/bcd + chi/hij

そのような分解を計算するUnixユーティリティはありますか? (最も長い共通プレフィックス計算と相対パス計算のための別々のユーティリティがある場合は、「またはユーティリティ」を追加しました。)

(これらのユーティリティを書くことはあまり難しくありませんが、可能であればカスタムツールよりもやや標準的なツールを優先しようとします。)

1指定されたファイルシステムで(パス)の存在、リンクなどの問題を回避するために、「パス」の代わりに「パスの指定」を書き込みます

ベストアンサー1

以下を使用して、行リストの最も長い共通の先行部分文字列を計算できます。

sed -e '1{h;d;}' -e 'G;s,\(.*\).*\n\1.*,\1,;h;$!d'

たとえば、

/abc/bcd/cdf
/abc/bcd/cdf/foo
/abc/bcd/chi/hij
/abc/bcd/cdd

返品:

/abc/bcd/c

パスコンポーネントに制限するには、次の手順を実行します。

sed -e 's,$,/,;1{h;d;}' -e 'G;s,\(.*/\).*\n\1.*,\1,;h;$!d;s,/$,,'

/abc/bcd上記の例に戻ります)。

おすすめ記事