免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 23039 | 回复: 10
打印 上一主题 下一主题

shell 中如何显示某文件的绝对路径? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-18 09:49 |只看该作者 |倒序浏览
经常会有情况想要得到某另外一个目录中的文件的绝对路径,以前的方法比较笨,就是先cd过去,然后pwd,得到的路径再加上 "/fileName", 这样凑成一个完整的路径加文件名.
不知道有没有什么命令能够直接完成这个事情? 难道一定要自己编程写个读inode的程序?

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
2 [报告]
发表于 2012-05-18 11:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2012-05-18 12:14 |只看该作者
  1. $ find $PWD -name "filename"
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2012-05-18 13:24 |只看该作者
  1. readlink
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-05-18 13:26 |只看该作者
whereis                        

论坛徽章:
0
6 [报告]
发表于 2012-05-18 15:46 |只看该作者
其实这个只是某些场合为了方便.比如这种情况: 我当前的目录是:    /home/test/work/,  一旦我make,就会生成一个新的目录和文件在当前目录下的myobjs/test.elf. 然后我现在需要得到它的全路径/home/test/work/myobjs/test.elf.
当我make完了以后,我现在的做法是先cd到myobjs,然后pwd,然后得到路径,后面手动加上文件名.但是我觉得有些弱啊..
我如果在当前目录下  find myobjs -name "test.elf", 只能得到myobjs/test.elf,而非全路径.
whereis也不行...

论坛徽章:
0
7 [报告]
发表于 2012-05-18 15:50 |只看该作者
${ } 的一些特异功能
为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个 .  及其左边的字符串:file.txt
${file##*.}:拿掉最后一个 .  及其左边的字符串:txt
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:拿掉最后一个 .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个 .  及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:

# 是去掉左边(在鉴盘上 # 在 $ 之左边)
% 是去掉右边(在鉴盘上 % 在 $ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配。

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
8 [报告]
发表于 2012-05-18 16:14 |只看该作者
realpath 命令

论坛徽章:
0
9 [报告]
发表于 2012-05-18 16:59 |只看该作者
本帖最后由 lihaojiebobo 于 2012-05-18 17:14 编辑

谢谢楼上提示哈, 利用 realpath写了个小app,加到了自己的shell里,然后可以满足自己的需求了.

而后我可以在make完了以后, rp myobjs/test.elf 得到:
real_path:/home/test/work/myobjs/test.elf   而不用cd进去pwd了...也算满足了我的需求..呵呵..哪位大虾有更好的方法欢迎啊~

论坛徽章:
0
10 [报告]
发表于 2013-03-14 09:44 |只看该作者

lihaojiebobo 发表于 2012-05-18 15:46
其实这个只是某些场合为了方便.比如这种情况: 我当前的目录是:    /home/test/work/,  一旦我make,就会生成 ...

L_kernel 发表于 2012-05-18 13:24


已经有人说了啊,有现成的可以直接用

readlink -f myobjs/test.elf
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP