回答:
ここから:https : //stackoverflow.com/a/4031502/804713
macportsとhomebrewは、greadlink(GNU readlink)を含むcoreutilsパッケージを提供します。mackb.comのMichael Kallweitt投稿の功績
coreutilsをインストールする
greadlink -f file.txt
それを行うには多くの方法があります。ここにあなたのために働くかもしれない一つの例があります:
claw:~ jonv$ echo `pwd`/`ls config.in.php`
/Users/jonv/config.in.php
さらに多くの例が必要な場合は、stackoverflowのこの投稿に多数の記事があります。
与えられたソリューションはどれも好きではなかったので、https://stackoverflow.com/a/22684652/953327に基づいて独自のソリューションを作成しました。
単にそのコンバイン関数呼び出しでエイリアスを作成pwd
してls $1
。.bash_profile
必要に応じて、これを追加できます。
alias lsf='function _lsf(){ echo "$(pwd)/$(ls $1)"; };_lsf'
使用例:
lsf registry.lock
-> /tmp/registry.lock
lsf
「list full」または「list file」を選択しましたが、理にかなっていますが、自由に変更してください。
更新(@ santiago-ariztiに感謝)これを相対パスで使用できるようにするには(例lsf ../../readme.md
)
alias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
lsf ../../readme.md
ように電話する必要があったので、あなたのバージョンを少し変更しましたalias lsf='function _lsf(){ (cd $(dirname "$1") && echo $(pwd)/$(basename "$1")) };_lsf'
あなたが必要とする以上のものが欲しかったので、のような相対ディレクトリ内のファイルについても質問できるようにする必要が../../readme.md
あり、結果は次のようになるはずです/Users/santi/readme.md
そのため、次の内容で$PATH
呼び出されるの一部であるフォルダーに(実行可能)スクリプトを作成しましたlsf
。
#!/bin/bash
F=${1:?'usage lsf ../../readme.md'}
( cd $(dirname "$F") && echo $(pwd)/$(basename "$F") )
したがって、次のように使用できます。
santi@santis-mac:~/p/dir1/dir2$ lsf ../../readme.md
/Users/santi/p/readme.md
警告を与えるパラメータはありません
santi@santis-mac:~/p/dir1/dir2$ lsf
/Users/santi/bin/lsf: line 3: 1: usage lsf ../../readme.md
偽のディレクトリには、(のために警告できますdirname
)
santi@santis-mac:~/p/dir1/dir2$ lsf ../../fakedir/readme.md
/Users/santi/bin/lsf: line 5: cd: ../../fakedir: No such file or directory
偽のファイルですが、実際のディレクトリは警告しません(必要に応じて検証を追加できます)
santi@santis-mac:~/p/dir1/dir2$ lsf ../../fakefile.md
/Users/santi/p/fakefile.md
次は、作業ディレクトリ内で一致するファイルを見つけ、file.txt
その絶対パスを返します。
find `pwd` -name file.txt
つかいます realpath
例えば:
$ realpath README.md
/Users/joe/my/long/directory/structure/README.md
ここでstackoverflowについて回答しました:https : //stackoverflow.com/a/3915075/441960
参考までに、私のバージョンのMacOS(OSX):
$ uname -a
Darwin my-machine 18.7.0 Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64 x86_64
-f
非GNUで動作しないのか、それを動作させる方法を考えていました。これは動作します。ありがとう