ソリューション技術部 山口(@kinunori)です。
ファイルのフルパスを取得する際に皆さんどうしてますか?
色々やり方はあると思いますが、効率が良くないのは以下の方法かと思います。
同僚から効率の良いやり方を聞かれたので、ここにも残しておきます。 対象は Linux(ディストリビューションは問わない) です。 OS Xでもreadlinkコマンドはありますが、-fオプションはありません。
readlinkコマンド
私が良く使うのはreadlinkコマンドです。 実ファイルもしくはハードリンクの場合はフルパスを、シンボリックリンクの場合はリンク元のフルパスを返してくれます。
ファイルのフルパスを取得する
readlink -f <フルパスを取得したいファイル名>
例:
$ pwd /home/ec2-user $ ls amazon-ssm-agent.rpm tmp $ readlink -f amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm $ ln amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk $ ls -li total 11492 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm.lnk 1966084 drwxrwxr-x 2 ec2-user ec2-user 4096 Apr 28 09:59 tmp $ readlink -f amazon-ssm-agent.rpm.lnk /home/ec2-user/amazon-ssm-agent.rpm.lnk
注意点: ファイルが存在しない場合に実行すると、存在しないファイルのフルパスを返してしまうので注意が必要です
$ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk tmp $ readlink -f amazon-ssm-agent.rpm.test /home/ec2-user/amazon-ssm-agent.rpm.test $ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk tmp
シンボリックリンクのリンク元を取得する
フルパス取得の場合と同じです。
readlink -f <フルパスを取得したいファイル名>
例:
$ ln -s amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm.slink $ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.slink tmp $ readlink -f amazon-ssm-agent.rpm.slink /home/ec2-user/amazon-ssm-agent.rpm
用途
私の場合は、シェルスクリプトでファイルのパスを取得し、変数に格納する際など使ってます。 手順書を作る時なども便利かも知れないですね。
知らなかった方は是非使ってみてください。