学习研究和实际使用中会经常碰到集中、批量文件改名或者添加和删除文件名的问题,所以下定决心研究一下,为了一劳永逸地解决了这个问题,多方学习,下面列出了目前我所能掌握的方法和命令,不正之处请大家指正,欢迎评点、补充,谢谢!
第一种情况: 为文件加后缀
1.问题:
在相同的目录下有海量以日期命名的文件,其中有的有后缀,有的以点结尾,如20020101.,20020102.,……,20020101.td,20020102.td,……
要求: 把所有以点结尾的加上后缀.ts
我自己的方法:
#!/bin/bash
for files in `ls *.`
do
mv $files `echo “$filests” `
done
2. 同上
mv $files ${files}ts
3. 同上
mv $files `$files.ts|sed ‘s/\.//’ `
4. file =>file.txt
mv $files $files.txt
5. *.04 => *04.txt
mv $files $(echo ${files}.txt|sed ‘s/\.//1′)
或者
mv $files `echo ${files}.txt|sed ‘s/\.//1′ `
第二种情况: 为文件改后缀(.old => .new)
有如下方法可供选择:
1. rename .old .new *
2. mv $files ${file%.old}.new
3. mv $files `echo $files|tr .old .new`
4. mv $files `echo $files|sed ‘s/\.old/\.new/’ `
第三种情况: 给文件去掉后缀 (*.dat => *)
1. mv $files `echo $files |sed ‘s/\.dat//’ `
2. mv $files `echo $files|tr .dat (4空格)`
第四种情况:为文件改前缀 (re* => un*)
1. mv $files un${$files#re}
2. mv $files `echo $files | tr re un`
但是在实际使用的时候,碰到一个批量地在好多子目录下修改文件后缀名的问题,例如,现在你有如下的目录结构:
[lan@/home/lan/tmp]$tree
.
|– 11
| `– aa
| `– 11.gif
`– 22
`– bb
`– 22.gif
4 directories, 2 files
[lan@/home/lan/tmp]$
如何才能不用分别进入11/aa目录和22/bb目录下,就可以一次性地将后缀名为gif的文件修改为以jpg为后缀名的文件呢?经过自己的不断尝试和实验,终于找到了完美的命令和方法,只需要在/home/lan/tmp目录下执行如下的命令即可以一次完成这个任务:
rename .gif .jpg */*/*
效果相当爽,不妨你自己试试看