home

Love life, love sports, love to learn, & love...

Blog

Thought,  done  &  record.

订阅到QQ邮箱 google reader google reader

文件名截取脚本

任务描述

获取一个目录里面的所有文件的文件名(带扩展名),不带扩展名的文件名,以及扩展名。

脚本程序

#! /bin/bash 

for file in `ls $1` 
do 
filename=${file%.*}
extension=${file##*.}
echo $filename
echo $extension
done

程序解释

首先利用 ls 命令列出目标目录的所有文件名称,此时会得到一个文件名称列表,然后利用 for 循环逐个将列表中的文件名称赋值给循环变量 file,此时 file 就是所要的带扩展名的文件名。最后就是对每个文件名称进行截取获得其不带扩展名的文件名 filename,以及扩展名 extension,具体利用了 bash 脚本的字符串截取方法。

不过此脚本程序有个问题,如果此脚本文件自身在目标目录内,则也会输出脚本自身的文件名称,不过此时可以利用 sed 命令来删除一些行。如果此脚本文件自身不在目标目录内,则无此现象。

具体应用

在做博客的时候,需要遍历某一目录下的所有文件,并获取文件名,然后输出一些格式化的语句,避免了对于每个文件都手动写入。

比如说,在 html 文件中欲对一目录下的每个文件得到下面这样的格式化输出:

<li><a href="dis_dir/filename.extension" target="_blank" title="filename"><img src="dis_dir/filename.extension" alt="filename" /></a></li>

则可以将上述脚本稍加修改,即可得到 get_filename.sh 脚本:

#! /bin/bash 

for file in `ls $1` 
do 

filename=${file%.*}

echo '<li><a href="/photo/body_art/'$file'" target="_blank" title="'$filename'"><img src="/photo/body_art/'$file'" alt="'$filename'" /></a></li>' >> $2
done

具体用法为:

./get_filename.sh dir newfile.txt

注意:利用此脚本时,必须将此脚本放置到目标目录外,否则会输入一行多余信息,即此脚本自身的文件名称格式化输出。要想在目标目录内进行操作,要在脚本末尾加上下面一句命令:

sed -i '1d' $2

此命令的作用是将所生成的文件的第一行信息给删掉。

回顶部