Answers:
从这里: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
如果你想要更多的例子,也有上一帮这个职位的计算器。
不喜欢任何给定的解决方案,因此我根据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
了“完整列表”或“列表文件”,这对我来说很有意义,但可以随时进行修改。
更新(感谢@ 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
使用 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上工作以及如何使其工作。这可行。谢谢