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
上記の例に戻ります)。