文件名截取脚本
任务描述
获取一个目录里面的所有文件的文件名(带扩展名),不带扩展名的文件名,以及扩展名。
脚本程序
1 #! /bin/bash
2
3 for file in `ls $1`
4 do
5 filename=${file%.*}
6 extension=${file##*.}
7 echo $filename
8 echo $extension
9 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 脚本:
1 #! /bin/bash
2
3 for file in `ls $1`
4 do
5
6 filename=${file%.*}
7
8 echo '<li><a href="/photo/body_art/'$file'" target="_blank" title="'$filename'"><img src="/photo/body_art/'$file'" alt="'$filename'" /></a></li>' >> $2
9 done
具体用法为:
$ ./get_filename.sh dir newfile.txt
注意:利用此脚本时,必须将此脚本放置到目标目录外,否则会输入一行多余信息,即此脚本自身的文件名称格式化输出。要想在目标目录内进行操作,要在脚本末尾加上下面一句命令:
$ sed -i '1d' $2
此命令的作用是将所生成的文件的第一行信息给删掉。
上一篇: 神雕瞎驴新解——金庸看完哭了
下一篇:Inkscape 学习笔记