LinuxSir.cn,穿越时空的Linuxsir!

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

如何把文件名中的后缀去掉?

[复制链接]
发表于 2005-6-29 17:14:15 | 显示全部楼层 |阅读模式
有没有这样的操作:

command x.gz
结果是:x

谢谢了!
发表于 2005-6-29 17:40:03 | 显示全部楼层
mv x.gz x
回复 支持 反对

使用道具 举报

发表于 2005-6-30 13:54:48 | 显示全部楼层
man mv
mv --help
回复 支持 反对

使用道具 举报

发表于 2005-7-1 21:49:32 | 显示全部楼层
楼主的意思是不是这个文件名是不确定的,主要是为了在shell脚本中用(比如遍历一个目录中所有的文件,然后去掉每个文件的扩展名)。如果文件名放在变量FILENAME中,那么这样:
echo $FILENAME | awk -F. '{print $1}'
就可以了。
要得到这个文件名的话:
MFILENAME=`echo $FILENAME | awk -F. '{print $1}'`
注意两边是反单引号。
特别是有些光盘上的html文档,由于制作光盘的人没有敬业精神,没有考虑光盘的文件系统格式。比如:一个html文档,本来文件扩展名是html,但是由于用的光盘文件系统的文件名是8.3(即文件中限制在8个字符,扩展名限制在3个字符),那么会出现xxx~1.htm这种情况,导致链接无效。就可以写个脚本,核心代码如下:
for E_FILENAME in `ls -d *`
do
if echo $E_FILENAME | grep "~"  > /dev/null 2>&1; then
     M_FILENAME=`echo $E_FILENAME | awk -F~ '{print $1}'`
     FILENAME=$M_FILENAME".html"
else
     FILENAME=$E_FILENAME
fi
mv $E_FILENAME $FILENAME
done
当然,如果涉及到子目录中的文件,就还要加代码。
回复 支持 反对

使用道具 举报

发表于 2005-7-1 22:31:19 | 显示全部楼层
你们都误会楼主的意思了
回复 支持 反对

使用道具 举报

发表于 2005-7-2 09:18:16 | 显示全部楼层
有这样的命令吗,这是一个小的function,庶几满足楼主的需求。

  1. strip_ext() {
  2. ext=${1##*.}
  3. echo $1 | sed "s/.$ext//"
  4. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-2 09:47:07 | 显示全部楼层
一时思路短路,更简洁的是

  1. strip_ext() {
  2. echo ${1%.*}
  3. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-2 11:02:47 | 显示全部楼层
Post by troll
一时思路短路,更简洁的是

  1. strip_ext() {
  2. echo ${1%.*}
  3. }
复制代码

    
回复 支持 反对

使用道具 举报

发表于 2005-7-2 19:04:46 | 显示全部楼层
传说中的掐头去尾?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-13 17:02:00 | 显示全部楼层
谢谢!兄弟们
回复 支持 反对

使用道具 举报

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

本版积分规则

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