Ubuntu/CentOS批量修改文件名

您所在的位置:网站首页 linux怎么修改文件名 Ubuntu/CentOS批量修改文件名

Ubuntu/CentOS批量修改文件名

#Ubuntu/CentOS批量修改文件名| 来源: 网络整理| 查看: 265

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

 

 

参考推荐:

Linux下批量修改文件名(rename)

Linux rename命令批量重命名的方法

Linux 之 shell 算术运算符

Linux 之 shell 比较运算符

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3