LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2185|回复: 17

请问如何得到文件的绝对路径

[复制链接]
发表于 2006-10-16 08:15:57 | 显示全部楼层 |阅读模式
类似
  1. $ pwd
  2. /tmp/test
  3. $ abspath a.txt
  4. /tmp/test/a.txt
  5. $ abspath /tmp/b.txt
  6. /tmp/b.txt
复制代码


谢谢
 楼主| 发表于 2006-10-16 12:53:17 | 显示全部楼层
凑合……
[php]#!/bin/sh
F=$1
f=`basename "$F"`
p=`dirname "$F"`
cd $p
echo "$PWD/$f" [/php]
回复 支持 反对

使用道具 举报

发表于 2006-10-16 13:11:38 | 显示全部楼层
是不是只有两个情况

1. 当前目录下的相对路径

2. 已知绝对路径

2就已经知道绝对路径了,1么就把当前路径pwd和相对路径拼接一下?是不是这个意思。

再看个东西,不要叫我troll噢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-10-16 13:26:34 | 显示全部楼层
Post by troll
是不是只有两个情况

1. 当前目录下的相对路径

2. 已知绝对路径

2就已经知道绝对路径了,1么就把当前路径pwd和相对路径拼接一下?是不是这个意思。

再看个东西,不要叫我troll噢。

troll....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-16 13:26:52 | 显示全部楼层
真是饿晕了,  readlink 就可以的……

readlink -f xxx.txt


[php]
#!/bin/sh
F=$1
P=`readlink -f "$F"`
echo $P
[/php]

神仙说这有个副作用,
如果目标是个链接, 那么得出的是链接指向的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-16 13:29:39 | 显示全部楼层
算了, 把吃饭前尝试过的写下来吧
[php]
#!/bin/sh
F=$1
P="$PWD/$F"
[ ${$F:0:1} = '/' ]  &&  P=$F
echo $P
[/php]

用   ${$F:0:1} = '/'  判断 第一个字符是否 /

[php]
#!/bin/sh
F=$1
[ ${$F:0:1} = '/' ]  &&  P=$F ||  P="$PWD/$F"
echo $P
[/php]
回复 支持 反对

使用道具 举报

发表于 2006-10-16 14:22:45 | 显示全部楼层
helo_aBiNg:/usr$ find $(pwd) -name beryl
>/usr/bin/beryl
>/usr/lib/beryl
>/usr/share/doc/beryl
>/usr/share/beryl
回复 支持 反对

使用道具 举报

发表于 2006-10-17 21:23:12 | 显示全部楼层
[ "${1#/}" == "$1" ] && echo "$PWD/$1" || echo "$1"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-18 16:46:14 | 显示全部楼层
谢谢                         .
回复 支持 反对

使用道具 举报

发表于 2006-10-18 22:52:45 | 显示全部楼层
之前一直在想这个问题,包括如何在c里面实现,而且需要输出不带.和..之类的可读性较强的路径(要给人看的,如/aaaa/bbbb/../ccc/./ddd之类的不行,虽然还是可以正常工作),好像shell里面好实现一点
目录可以这样:ABS_PATH=`cd $DIRNAME; pwd`
文件可能要判断一下:
if [ -d $DIRNAME ]; then
ABS_PATH=`cd $DIRNAME; pwd`
else
TMPDIR=`dirname $DIRNAME`
TMPFILE=`basename $DIRNAME`
ABS_PATH=`cd $TMPDIR; pwd`"/"$TMPFILE
fi
有点冗长,而且该目录至少要有rx权限,不知道大家有没有更好的方法
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表