Ubuntu/CentOS 批量修改文件名
CentOS 批量修改文件名
find -name "*.txt" |for i in *;do mv $i `echo $i |sed 's/\.txt//g'`;done
find -name "*.txt" |awk -F'.' '{print $1} |xargs mv {}.txt {}
如果只是修改后缀名,用rename 即可,命令如下:
rename .txt .bk *
Linux下批量修改文件名
1. rename命令批量修改文件名
Linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了
比如把所有的表为cdb1_* 修改为cdb_*的,在本目录下只需要
# rename 'cdb1' 'cdb' *
以前都是写个for循环来做...想想多傻啊, 呵呵
rename还有更多的功能, 建议man rename下
RENAME(1) Perl Programmers Reference Guide RENAME(1) NAME rename - renames multiple files SYNOPSIS rename [ -v ] [ -n ] [ -f ] perlexpr [ files ] DESCRIPTION "rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' * OPTIONS -v, --verbose Verbose: print names of files successfully renamed. -n, --no-act No Action: show what files would have been renamed. -f, --force Force: overwrite existing files. ENVIRONMENT No environment variables are used.
2. 批量更改文件名 rename
通过 man rename 命令可以得知,rename 命令其实是一个 Perl 脚本命令,
它专用于批量地给多文件重命名(rename multiple files)
命令格式 :
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
perlexpr 是一种 Perl 脚本格式的正则表达式。
参数:
-v, --verbose
Verbose: print names of files successfully renamed.
详细模式:打印成功更改的文件名列表
-n, --no-act
No Action: show what files would have been renamed.
测试模式:并不真正的执行命令,而只是显示哪些文件名应该怎么进行
更改,用于测试模式。
-f, --force
Force: overwrite existing files.
强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在
的文件。
rename 的典型应用:
0. 批量更改文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's//.txt//.ext/' *
$ ls
1.ext 2.ext 3.ext 4.ext
1. 批量删除文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's//.txt//' *
$ ls
1 2 3 4
2. 批量添加文件扩展名
$ ls
1 2 3 4
$ rename 's/$//.txt/' *
$ ls
1.txt 2.txt 3.txt 4.txt
3. 按自己的方式批量重命名文件
$ ls
1.ext 2.ext 3.ext 4.ext
$ rename 's/(/d)/第$1 章/' *
$ ls
第 1 章.ext 第 2 章.ext 第 3 章.ext 第 4 章.ext
方法1:把文件名拆分处理,可以任意修改文件名
find -name '*.log' -printf %f//n|awk -F'.' '{print $1}'|xargs -i{} mv {}.log mim_{}.log
方法2:利用rename
一般的linux下的rename命令比较简单
rename 'test' 'mim' '*.log'
把文件名中的某部分字符串替换掉
ubuntu下的rename命令支持正则表达式,因此功能更强大。
方法3:直接利用find和xargs和mv,中间不用awk,这样只能添加后缀名,不能修改文件名。
rename 实例 (Ubuntu)
homer@mimvp# ls * # 显示所有文件 111.txt 222.txt 333.txt homer@mimvp# ls * | xargs rename 's//aaa_/' # 修改所有文件,添加前缀 aaa_ homer@mimvp# ls * # 显示添加前缀的所有文件 aaa_111.txt aaa_222.txt aaa_333.txt homer@mimvp# ls * | xargs rename 's/\.txt/_bk\.txt/' # 修改所有文件,添加后缀 _bk homer@mimvp# ls * # 显示添加前缀的所有文件 aaa_111_bk.txt aaa_222_bk.txt aaa_333_bk.txt homer@mimvp# ls * | xargs rename 's/_bk\.txt/\.txt/' # 修改所有文件,删除后缀 _bk homer@mimvp# ls * # 显示删除后缀的所有文件 aaa_111.txt aaa_222.txt aaa_333.txt homer@mimvp# ls * | xargs rename 's/aaa_//' # 修改所有文件,删除前缀 aaa_ homer@mimvp# ls * # 显示删除前缀的所有文件 111.txt 222.txt 333.txt
rename 实例 (CentOS)
ls 2016121*.txt | xargs rename .txt _bk.txt
homer@mimvp# ls 2016121*.txt 20161210.txt 20161211.txt 20161212.txt 20161213.txt 20161214.txt 20161215.txt 20161216.txt 20161217.txt 20161218.txt 20161219.txt homer@mimvp# ls 2016121*.txt | xargs rename .txt _bk.txt homer@mimvp# ls 2016121*.txt 20161210_bk.txt 20161211_bk.txt 20161212_bk.txt 20161213_bk.txt 20161214_bk.txt 20161215_bk.txt 20161216_bk.txt 20161217_bk.txt 20161218_bk.txt 20161219_bk.txt
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2017-02-22 20:15:39
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!