basename与dirname命令解析【转】
本文转载自:http://blog.csdn.net/choice_jj/article/details/8766335
basename命令
语法:basename string [suffix]
用于返回一个字符串的基本文件名称
basename命令读取string参数,删除以 / 结尾的前缀以及任何指定的suffix参数,并将剩余的基本文件名称写至标准输出。
basename命令应用以下创建基本文件名称的规则:
1· 如果 String 参数是 //(双斜杠) 或如果 String 参数包含的都是斜杠字符,则将字符串更改为单个 /(斜杠)。跳过步骤 2 到 4。
从指定字符串除去任何拖尾的 / 字符。
2· 如果在 String 参数中剩余任何 / 字符,则除去字符串的前缀直到(包含)最后一个 / 字符。
3· 如果指定 Suffix 参数,且它和字符串中的剩余的字符相同,则不修改此字符串。例如,输入:
# basename /u/dee/desktop/cns.boo cns.boo
结果是:
cns.boo
如果指定 Suffix 参数,且它和字符串中所有字符都不相同,但和字符串的后缀相同,则除去指定后缀。例如,输入:
# basename /u/dee/desktop/cns.boo .boo
结果是:
cns
不能在字符串中查找到指定的后缀不作为错误处理。
示例
(1)要显示一个 shell 变量的基本名称,请输入:
basename $WORKFILE
此命令显示指定给 shell 变量 WORKFILE 的值的基本名称。如果 WORKFILE 变量的值是 /home/jim/program.c 文件,则此命令显示 program.c
# basename /usr/bin/sort
# sort
(2)要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
OFILE=`basename $1 .c`.o
此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。
注:`(重音符号)指定命令替换。
dirname命令
用途说明
dirname命令可以取给定路径的目录部分(strip non-directory suffix from file name)。这个命令很少直接在shell命令行中使用,我一般把它用在shell脚本中,用于取得脚本文件所在目录,然后将当前目录切换过去。根据手册页上说的“Print NAME with its trailing /component removed; if NAME contains no /’s, output ‘.’ (meaning the current directory).”,似乎说“取给定路径的目录部分” 并不能很准确的概括dirname命令的用途。Linux下还有一个命令是basename,它与dirname相反,是取得文件名称部分。
常用参数
无。
使用示例
示例一 来自手册页的例子
[root@qzt196 ~]# dirname /usr/bin/sort
/usr/bin
[root@qzt196 ~]# dirname stdio.h
.
[root@qzt196 ~]#
示例二
[root@qzt196 ~]# dirname /usr/bin
/usr
[root@qzt196 ~]# dirname /usr/bin/
/usr
注意:此处的输出结果,似乎有点怪。这应该看下dirname命令的源代码才能解释了。
示例三 在bash脚本中的运用
- Bash代码
- #!/bin/sh
- # 跳转到脚本所在目录
- cd $(dirname "$0") || exit 1
- # 剩下的部分
这个写法我经常用到,因为有时候脚本执行时无法确定是在哪个目录,比如脚本用在crontab中时。
另一个写法是:cd `dirname $0` 其中反引号··等同于$()。
示例四 与另外一种截取目录的方法的比较
可以用${pathname%/*}截取掉pathname后面的文件部分。
[root@jfht ~]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*}
/usr/bin /usr/bin
[root@jfht ~]# pathname=/usr/bin/; echo $(dirname $pathname) ${pathname%/*}
/usr /usr/bin
[root@jfht ~]# pathname=/usr/bin; echo $(dirname $pathname) ${pathname%/*}
/usr /usr
[root@jfht ~]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*}
/ /usr
[root@jfht ~]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*}
/
[root@jfht ~]# pathname=/; echo $(dirname $pathname) ${pathname%/*}
/
[root@jfht ~]# pathname=stdio.h; echo $(dirname $pathname) ${pathname%/*}
. stdio.h
[root@jfht ~]#
path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
参考资料:http://study.chyangwa.com/IT/AIX/aixcmds1/basename.htm
http://codingstandards.iteye.com/blog/840784
http://codingstandards.iteye.com/blog/800028
basename与dirname命令解析【转】的更多相关文章
- dirname命令和basename命令
dirname返回文件所在目录路径,而basename则相反,去掉路径返回最后的文件名. direname: 用途 从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的 ...
- basename、dirname、alias、date
basename 此命令用于打印目录或者文件的基本名称. basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称. basename ( ...
- Linux命令——basename、dirname
简介 这2个命令多用于shell脚本 用法 basename filename_will_full_path dirname filename_will_full_path 对于但后缀的情况,base ...
- linux常用命令(shell脚本常用命令)(grep、cut、sort、uniq、seq、tr、basename、dirname)
本章命令: 1 2 3 4 5 6 grep cut sort uniq seq tr 1.grep 作用:过滤文本内容 选项 描述 -E :--extended--regexp 模式是扩展正则表达式 ...
- dirname 命令
dirname 命令用途将指定路径除了最后以外的部分写到标准输出.语法dirname Path描述dirname 命令读取指定路径名保留最后一个"/"(斜杠)及其后面的字符,删除其 ...
- (转)Linux:使用libgen.h:basename,dirname
Linux:使用libgen.h:basename,dirname basename以及dirname是两个命令: [test1280@localhost ~]$ which basename /bi ...
- linux mknod命令解析
linux mknod命令解析 http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html mknod:make node 生成设备 ...
- C#基础:命令解析
1.普通格式命令的解析 例如: RENA<SP>E:\\A.txt<SP>C:\\B.txt<CRLF> (SP -> 空格,CRLF -> 回车加换行 ...
- Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...
随机推荐
- STL_map的使用
转自:http://www.kuqin.com/cpluspluslib/20071231/3265.html Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在m ...
- Array与NSArray关系
NSArray与Array之间的关系如同NSString与String之间的关系,NSArray是类类型,而Array是结构体类型,一个是引用类型,一个是值类型,它们是怎样实现无缝转换的呢?Swift ...
- 10.5 集合ArrayList 和 io流
1.ArrayListToFile package day10_io_fileWrite_Read.arraylist_tofile; import java.io.BufferedWriter; i ...
- Vue组件传值方法调用
1.子组件改变父组件的值 <father label="云盘快照" name="name2"> <son :props='rows' @ ...
- Xmind的使用
Xmind是用来学习整理思维的工具
- idea必选配置
参考: IDEA配置
- ubuntu中mysql忘记密码如何修改
1.在终端进入安装目录下:cd /etc/mysql 2.sudo cat debian.cnf 输入密码 3用如下图用户和密码登录 4.进入mysql use mysql 5.使用describe ...
- 自己动手编写vue插件
一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...
- Vue2.0如何实现父组件与子组件之间的事件发射与接收
关于vue2.0的事件发射和接收,大家都知道$dispatch和$broadcast在vue2.0已经被弃用了,取而代之的是更加方便快捷的方式,使用事件中心,组件通过它来互相通信,不管组件在哪一个层都 ...
- ebay 店铺状态
OrderStatusCodeType @XmlEnumValue("Active") @XmlEnumValue("Inactive") @XmlEnumVa ...