学习记录: 通过sed+ls命令完成 - [iyunv@localhost tmp]# ll
- 总计 4
- -rw-r--r-- 1 root root 36 03-30 18:24 test01
- [iyunv@localhost tmp]# cat test01
- 123456
- ddd123
- x123dd
- ~~
- d,.=12,l123
- [iyunv@localhost tmp]# cp test01 test02
- [iyunv@localhost tmp]# ll
- 总计 8
- -rw-r--r-- 1 root root 36 03-30 18:24 test01
- -rw-r--r-- 1 root root 36 03-30 18:25 test02
- [iyunv@localhost tmp]# sed -i 's/123/..123.bak/g' `ls /usr/tmp/test* `
- [iyunv@localhost tmp]# cat test*
- ..123.bak456
- ddd..123.bak
- x..123.bakdd
- ~~
- d,.=12,l..123.bak
- ..123.bak456
- ddd..123.bak
- x..123.bakdd
- ~~
- d,.=12,l..123.bak
- [iyunv@localhost tmp]#
通过find+xargs+perl命令完成 - [iyunv@localhost tmp]# cat test*
- ..123.bak456
- ddd..123.bak
- x..123.bakdd
- ~~
- d,.=12,l..123.bak
- ..123.bak456
- ddd..123.bak
- x..123.bakdd
- ~~
- d,.=12,l..123.bak
- [iyunv@localhost tmp]# find /usr/tmp/ -name 'test*' | xargs perl -pi -e 's|.123.bak|..hostlink|g'
- [iyunv@localhost tmp]# cat test*
- ...hostlink456
- ddd...hostlink
- x...hostlinkdd
- ~~
- d,.=12,l...hostlink
- ...hostlink456
- ddd...hostlink
- x...hostlinkdd
- ~~
- d,.=12,l...hostlink
- [iyunv@localhost tmp]#
还有很多方法可以实现批量替换更改文件内容就不一一列举了。 既然可以批量更改文件的内容,那么批量更改文件的名称呢? 这样很简单的就实现了当前目录下所有以.txt后缀的文件,都更改为.doc后缀 - [iyunv@localhost 123]# ll
- 总计 12
- -rw-r--r-- 1 root root 121 03-30 18:47 1.sh
- -rw-r--r-- 1 root root 68 03-30 18:29 test01.txt
- -rw-r--r-- 1 root root 68 03-30 18:29 test02.txt
- [iyunv@localhost 123]# rename .txt .doc *.txt
- [iyunv@localhost 123]# ll
- 总计 12
- -rw-r--r-- 1 root root 121 03-30 18:47 1.sh
- -rw-r--r-- 1 root root 68 03-30 18:29 test01.doc
- -rw-r--r-- 1 root root 68 03-30 18:29 test02.doc
for+cut+mv实现批量更改文件后缀名称(同理要更改文件名只需要稍作变更即可) - [iyunv@localhost 123]# ll
- 总计 4
- -rw-r--r-- 1 root root 121 03-30 18:47 1.sh
- -rw-r--r-- 1 root root 0 03-30 19:13 20130101(0).123
- -rw-r--r-- 1 root root 0 03-30 19:14 20130101.123
- ###for循环文件名称,对后缀进行改名
- [iyunv@localhost 123]# for filename in `ls *.123 | cut -d '.' -f1`;do mv $filename.123 $filename.zip;done
- [iyunv@localhost 123]# ll
- 总计 4
- -rw-r--r-- 1 root root 121 03-30 18:47 1.sh
- -rw-r--r-- 1 root root 0 03-30 19:13 20130101(0).zip
- -rw-r--r-- 1 root root 0 03-30 19:14 20130101.zip
- [iyunv@localhost 123]#
总结:根据实际需求,通过find/sed/awk/for灵活结合,对目录文件进行批量管理。
以下为转载补充: - 1、删除所有的 .bak 后缀:
- rename 's/\.bak$//' *.bak
- 2、把 .jpe 文件后缀修改为 .jpg:
- rename 's/\.jpe$/\.jpg/' *.jpe
- 3、把所有文件的文件名改为小写:
- rename 'y/A-Z/a-z/' *
- 4、将 abcd.jpg 重命名为 abcd_efg.jpg:
- for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done
- 5、将 abcd_efg.jpg 重命名为 abcd_lmn.jpg:
- for var in *.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg"; done
- 6、把文件名中所有小写字母改为大写字母:
- for var in `ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`; done
- 7、把格式 *_?.jpg 的文件改为 *_0?.jpg:
- for var in `ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0" $2}'`; done
- 8、把文件名的前三个字母变为 vzomik:
- for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`; done
- 9、把文件名的后四个字母变为 vzomik:
- for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`; done
|