#原由 最近需要写一堆snmp相关的脚本程序,因为对应节点的关系已经确定,就顺便确定了一下脚本所在的目录结构。那么现在的一个问题是要求不使用相对路径,而要使用绝对路径。那么获取绝对路径这个问题需要解决。
#解决办法
ls 不能解决
网上有人给了一种办法是使用命令
ls | sed "s:^:`pwd`/:" | sed "s/^/$HOSTNAME:/g"
但是这样的命令只能获取当前目录的文件的全路径,并且还不是很对。
o@o-pc:~/snmp/cmd/c$ ls| sed "s:^:`pwd`/:" | sed "s/^/$HOSTNAME:/g"
o-pc:/home/o/snmp/cmd/c/codecRecord
o-pc:/home/o/snmp/cmd/c/commonConfiguration
...
o@o-pc:~/snmp/cmd/c$
那么递归获取呢?即便是给ls加上-R的参数,也是不行的,结果有误。
tree 来解决
既然ls无法解决这个问题,那么可以使用tree程序来试试。 参数-i表示不以阶梯状显示,-f表示显示完整的相对路径。
tree -if
结果如下,确实比较有效了,但是还显示了目录项的,这不是我所需要的,我只要文件的。
o@o-pc:~/snmp/cmd/c$ tree -if
.
./codecRecord
./commonConfiguration
./devicePerformance
./devicePerformance/a.c
./devicePerformance/a.out
./devicePerformance/devicepfCode
./devicePerformance/devicepfCode.c
./devicePerformance/devicepfCode.h
./deviceStatus
...
上面的只是完成了一部分,还可以加上sed "s:^:pwd/:"来添加全路径,才是我想要的。
##linux tree用法
tree
功能说明:以树状图列出目录的内容。
语 法:tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...]
补充说明:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
参 数:
说明
-a
显示所有文件和目录。
-A
使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C
在文件和目录清单加上色彩,便于区分各种类型。
-d
显示目录名称而非内容。
-D
列出文件或目录的更改时间。
-f
在每个文件或目录之前,显示完整的相对路径名称。
-F
在执行文件,目录,Socket,符号连接,管道名称名称,各自加上*,/,=,@,`
-g
列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i
不以阶梯状列出文件或目录名称。
-I
不显示符合范本样式的文件或目录名称。
-l
如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n
不在文件和目录清单加上色彩。
-N
直接列出文件和目录名称,包括控制字符。
-p
列出权限标示。
-P
只显示符合范本样式的文件或目录名称。
-q
用"?"号取代控制字符,列出文件和目录名称。
-s
列出文件或目录大小。
-t
用文件和目录的更改时间排序。
-u
列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x
将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。