上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ディレクトリのシンボリックリンクの本体を表示するスクリプト

Ubuntu9.04用のGTKツール(GUI版)です。他のバージョンでも正常に動作するかもしれません。

ディレクトリのパスを/ディレクトリからの絶対位置で表示するときに、上のディレクトリにシンボリックリンクが(複数)含まれていても、その本体を見つけ出して、/ディレクトリからの絶対位置を表示するスクリプトです。

次のファイルをダウンロード(右クリックして保存)してファイル名をsearchFullPath.shに変えてください。
searchFullPath.txt

そして、Ubuntuなどの端末でダウンロードしたファイルの存在するディレクトリに移動して、
$ bash ./searchFullPath.sh
で実行してください。
もしくはsearchFullPath.shを右クリックして「プロパティ」ー「アクセス権」で
「プログラムとして実行できる」にチェックすれば、
ダブルクリックで「実行する」をクリックすることでも使えるようになります。

searchFullPath.txt
の内容は以下のとおりです。


#!/bin/bash
# このスクリプトは選択されたディレクトリについて、ルートディレクトリ(/)からの絶対パスによる表記で表します。ディレクトリにシンボリックリンクが貼られている場合、リンク元を使って表示します。
currentdir=$PWD
zenity --title="ディレクトリの絶対パスによる表記を見つけ出すスクリプト" --width=400 --info --text="次のウィンドウでは、絶対パスによる表記を知りたいディレクトリを一つだけ選択してください。"
dir="$(zenity --title="ディレクトリの絶対パスによる表記を見つけ出すスクリプト" --file-selection --directory)"
dirstart="${dir}"
if [ "$(echo "$dir"|cut -c1)" != "/" ]
then
dir="${PWD}/${dir}"
fi
if [ -n "$(echo "$dir"|tr "/" '\n'|tail -n1)" ]
then
dir="${dir}/"
fi
while [ "$(echo "$dir"|grep -G "\/\.\/")" ]
do
dir="$(echo "$dir"|sed -e "s/\/\.\//\//g")"
done
while [ "$(echo "$dir"|grep -G "\/[^\/]*[^\/\.]\+[^\/]*\/\.\.\/\|\/\.\{3,\}\/\.\.\/")" ]
do
dir="$(echo "$dir"|sed -e "s/\/[^\/]*[^\/\.]\+[^\/]*\/\.\.\/\|\/\.\{3,\}\/\.\.\//\//g")"
done
# ここまでで、$dirの最初は/、最後は/であり、「/./」や「/../」は入っていない。
dir1="$(echo "$dir"|sed -e "s/\([^\/]*\/\)/\1\n/"|head -n1)"
dir2="$(echo "$dir"|sed -e "s/\([^\/]*\/\)/\1\n/"|tail -n1)"
# ここまでで、$dir1=「/」である。$dir2の最初は/ではなく、最後は/であり、「/./」や「/../」は入っていない。
while [ -n "$dir2" ]
do
if [ "$(echo "$dir1"|cut -c1)" != "/" ]
then
dir1="${PWD}/${dir1}"
fi
cd "$dir1"
dir3="$(echo "$dir2"|sed -e "s/\([^\/]*\)\//\1\n/"|head -n1)"
# echo チェック用表示: $dir1 , $dir2 , $dir3
if [ "$(ls -l "$dir3"|cut -c1)" = "l" ]
then
# $dir3(末尾は/ではない)がシンボリックリンク
dir4="$(ls -l "$dir3"|sed -e "s/ -> /\n/g"|tail -n1)"
if [ "$(echo "$dir4"|cut -c1)" = "/" ]
then
# $dir4(シンボリックリンクのリンク元)の最初が/
dir="$(echo ${dir4}|sed -e "s/\/$//")/$(echo "$dir2"|sed -e "s/[^\/]*\///")"
else
# $dir4(シンボリックリンクのリンク元)の最初が/ではない
dir="${dir1}$(echo ${dir4}|sed -e "s/\/$//")/$(echo "$dir2"|sed -e "s/[^\/]*\///")"
fi
if [ -n "$(echo "$dir"|tr "/" '\n'|tail -n1)" ]
then
dir="${dir}/"
fi
while [ "$(echo "$dir"|grep -G "\/\.\/")" ]
do
dir="$(echo "$dir"|sed -e "s/\/\.\//\//g")"
done
while [ "$(echo "$dir"|grep -G "\/[^\/]*[^\/\.]\+[^\/]*\/\.\.\/\|\/\.\{3,\}\/\.\.\/")" ]
do
dir="$(echo "$dir"|sed -e "s/\/[^\/]*[^\/\.]\+[^\/]*\/\.\.\/\|\/\.\{3,\}\/\.\.\//\//g")"
done
# ここまでで、$dirの最初は/、最後は/であり、「/./」や「/../」は入っていない。
dir1="$(echo "$dir"|sed -e "s/\([^\/]*\/\)/\1\n/"|head -n1)"
dir2="$(echo "$dir"|sed -e "s/\([^\/]*\/\)/\1\n/"|tail -n1)"
else
# $dir3がシンボリックリンクではない。
dir1="${dir1}${dir3}/"
dir2="$(echo "${dir2}"|sed -e "s/[^\/]*\///")"
fi
done
zenity --title="ディレクトリの絶対パスによる表記を見つけ出すスクリプト" --width=400 --info --text="${dirstart}は$dir1です。"
# 作業が終了したら元のディレクトリに戻る。
cd $currentdir
exit 0

関連記事

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

プロフィール

kiyoshi

Author:kiyoshi
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
since 2011/9/25
現在の閲覧者数:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。