五种方法实现Linux批量重命名文件

Linux批量重命名文件是指对某些特定的文件统一进行重新命名,以改变原来一批文件的名称,这里介绍五种方法来实现。

Linux批量重命名文件会涉及到改变一个字母、改变一些相连字母、改变某些位置的字母、在最前面加上某些字母、或者改变字母的大小写。完成这里五个方法基本上就会解决了Linux批量重命名的工作。

1、我想把它们的名字的第一个1个字母变为"q",其它的不变
[root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | sed 's/^./q/'`; done

2、修改前面5个字母为zhaozh
[root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | sed 's/^...../zhaozh/'`; done

3、修改后面5个字母为snail
[root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | sed 's/.....$/snail/'`; done

4、在前面添加 _hoho_
[root@pps mailqueue]# for i in `ls`; do mv -f $i `echo "_hoho_"$i`; done

5、所有的小写字母变大写字母
[root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | tr a-z A-Z`; done

6、去掉括号:for i in `ls`;  do mv $i ${i/[/};   done

linux下shell批量修改文件后缀名

1.用rename命令修改后缀名,这个是最简单最省事的办法

[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 00:57 rename1.log
-rw-r--r-- 1 root root 0 09-27 00:57 rename2.log
-rw-r--r-- 1 root root 0 09-27 00:57 rename3.log
-rw-r--r-- 1 root root 0 09-27 00:57 rename4.log
-rw-r--r-- 1 root root 0 09-27 00:57 rename5.log
[root@demo test_rename]# rename log txt *.log #把*.log改为*.txt
[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 00:57 rename1.txt
-rw-r--r-- 1 root root 0 09-27 00:57 rename2.txt
-rw-r--r-- 1 root root 0 09-27 00:57 rename3.txt
-rw-r--r-- 1 root root 0 09-27 00:57 rename4.txt
-rw-r--r-- 1 root root 0 09-27 00:57 rename5.txt
[root@demo test_rename]#

2.用for、sed和mv修改后缀名

[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 01:51 rename1.log
-rw-r--r-- 1 root root 0 09-27 01:21 rename2.log
-rw-r--r-- 1 root root 0 09-27 01:21 rename3.log
-rw-r--r-- 1 root root 0 09-27 01:21 rename4.log
-rw-r--r-- 1 root root 0 09-27 01:21 rename5.log
[root@demo test_rename]# for i in $(ls .)
> do
> mv $i $(echo $i|sed 's/\.log/\.txt/')
> done
[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 01:51 rename1.txt
-rw-r--r-- 1 root root 0 09-27 01:21 rename2.txt
-rw-r--r-- 1 root root 0 09-27 01:21 rename3.txt
-rw-r--r-- 1 root root 0 09-27 01:21 rename4.txt
-rw-r--r-- 1 root root 0 09-27 01:21 rename5.txt
[root@demo test_rename]#

 
3.用find和xargs添加后缀名

[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 02:20 rename1
-rw-r--r-- 1 root root 0 09-27 02:20 rename2
-rw-r--r-- 1 root root 0 09-27 02:20 rename3
-rw-r--r-- 1 root root 0 09-27 02:20 rename4
-rw-r--r-- 1 root root 0 09-27 02:20 rename5
[root@demo test_rename]# find . -type f |xargs -i mv {} {}.txt
[root@demo test_rename]# ll
总计 20
-rw-r--r-- 1 root root 0 09-27 02:20 rename1.txt
-rw-r--r-- 1 root root 0 09-27 02:20 rename2.txt
-rw-r--r-- 1 root root 0 09-27 02:20 rename3.txt
-rw-r--r-- 1 root root 0 09-27 02:20 rename4.txt
-rw-r--r-- 1 root root 0 09-27 02:20 rename5.txt
[root@demo test_rename]#

例子:我现在要把aaaaaaaaaaaaa.jpg重命名为aaaaaaaaaaaaa_MED.jpg
请使用如下命令:
for i in *.jpg;do mv "$i" "${i%.jpg}_MED.jpg" ;done

同理aaaaaaaaaaaaa_MED.jpg重命名为aaaaaaaaaaaaa_LRG.jpg的方法:
for i in *.jpg;do mv "$i" "${i%_MED.jpg}_LRG.jpg" ;done
今天又有同学问linux下怎样批量更改文件后缀名,这个问题被别人问到三次了,所以这里给出几个解决方法

一.rename解决

.  Ubuntu系统下
rename 's/\.c/\.h/'  ./*
把当前目录下的后缀名为.c的文件更改为.h的文件

2.  CentOS5.5系统下
rename .c  .h   *.c
把当前目录下的后缀名为.c的文件更改为.h的文件

二.shell 脚本解决
#!/bin/bash
#http://blog.csdn.net/longxibendi
find ./ -name *.c  | while read i
do
        echo "$i";
        mv $i.c  $i.h
done

三.find  xargs 解决
 find ./ -name "*.c" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.c  ./{}.h
注意,第三种方案是递归的更改,会更改当前目录下及其子目录下所有匹配文件
[Python]代码
 #!/usr/bin/env python
 #coding=utf-
 import os,os.path
 import shutil,string
 dir = 'C:\\test'
 for i in os.listdir(dir):
     newfile = i.replace('.','_')
     oldfullfile = dir+'\\'+i
     newfullfile = dir+'\\'+newfile
     print oldfullfile
     print newfullfile
     shutil.mo
 rename批量改名的perl脚本
########################. jordan.sg #
use strict;
use File::Find;
use Cwd;
my $path = getcwd();
open(LOG, ">error.log") or die "open log file fail!";
print LOG "\n";
#my $object_count = ;
sub wanted {
#print "wanted $File::Find::name\n";
if ( -f $File::Find::name ) {
if ( $File::Find::name =~ /t\.txt$/ ) {
print LOG "$File::Find::name\n";
my $srcfile= $File::Find::name;
my $file = $_;
print LOG "- $_\n";
$file =~ s/t\.txt//;
print LOG "> $file\n";
rename($srcfile, $file);
}
#$obj_count++;
}
find( \&wanted, $path );
#print LOG "rename $obj_count files\n"; ##打印处理文件数
close(LOG);
#$File::Find::dir :当前路径名
#$_ :当前文件名不包含路径
#$File::Find::name :全路径的当前文件名
 Shell批量改名
========================================================================================
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v, --verboseVerbose: print names of files successfully renamed.
-n, --no-actNo Action: show what files would have been renamed.
-f, --forceForce: overwrite existing files.
简单的rename使用命令:
字母的替换
rename "s/AA/aa/" *             //把文件名中的AA替换成aa
修改文件的后缀
rename "s/.html/.php/" *     //把.html 后缀的改成 .php后缀
批量添加文件后缀
rename "s/$/.txt/" *             //把所有的文件名都以txt结尾
批量删除文件名
rename "s/.txt//" *               //把所有以.txt结尾的文件名的.txt删掉

一条命令:
rename "s/.JPG/.jpg/" *
就完成了全部工作。

========================================================================================
用法:

.将你要改名的文件都放在同一个文件夹下,运行”ls -l > oldnames”,然后“vi oldnames”,这时候看到的大概是这个样子:

total
drwxrwxr-x    yanpeng yanpeng     Sep  : app
drwxrwxr-x    yanpeng yanpeng     May    bin
drwxrwxr-x    yanpeng yanpeng     Jan  : docpay
.输入”ctrl+v”,移动光标,选中要删除的那一堆内容,其实就是文件名前面的那些列,输入“d”,得到的文件大概为

app
bin
docpay
.删除掉第一行的空行,保存退出vi,然后”cp oldnames newnames”。

.修改newnames文件中想要改名的文件为新文件名

.将change_name.sh脚本放在你的那个放置文件的夹下,运行./change_name.sh就可以了(注意有执行权限,加执行权限的方法chmod a+x change_name.sh)

change_name.sh脚本内容,拷贝下,存好就能用了

#!/bin/sh

OLDNAMES='oldnames'
NEWNAMES='newnames'

fileline=`sed -n '$=' $OLDNAMES`
echo $fileline

index=
while [ $index -le $fileline ]
do
oldname=`sed -n "${index}p" $OLDNAMES`
newname=`sed -n "${index}p" $NEWNAMES`
mv $oldname $newname
index=`expr $index + `
done
========================================================================================
写个shell脚本对文件进行批量改名
不能不懂脚本, 北邮人技术笔试
最近需要干这么件事,把当前文件夹下文件名含有eee的都改成大写的EEE,比如21-eee.doc就要改成21-EEE.doc。
写了个shell脚本,会sed就不难了:
for filename in *eee*; do newname=`echo $filename|sed -n ‘s/eee/EEE/p’`; mv $filename $newname;done
如果写成结构化会更清晰:
for filename in *eee*
do
newname=`echo $filename|sed -n ‘s/eee/EEE/p’`
mv $filename $newname
done
然后还有一个任务,将每个文件的执行权限去掉,这样写:
for filename in *; do chmod ugo-x $filename;done
结论:
shell是个好东西,sed还是很有用的,不能小看正则表达式。

带空格文件名批量重命名:

find . -type f -print0|while read -d $'\0' file;do mv "$file" "$(echo $file|sed 's/ /_/g')";done

find . -type f -print0|while read -d $'\0' file;do mv "$file" "$(echo $file|sed 's/[[:space:]]/_/g')";done

Linux批量重命名文件的更多相关文章

  1. linux 批量重命名文件

    模拟结果文件路径结构大概是:/当前目录/模型名/字模型名模拟/模拟温度/模拟结果文件. 模拟结果文件命名时相同的.模拟结果文件需要修改模拟结果文件的后缀名. 附shell脚本: find -type ...

  2. Linux命令行bash批量重命名文件

    本文介绍下,在linux下使用shell批量重命名文件的例子,有需要的朋友参考下吧. 在linux中,重命名文件名,需要用到mv命令.如果需要批量重命名名一批文件,就需要写bash脚本或命令行了. 例 ...

  3. Linux中重命名文件

    linux下重命名文件有两种方式: 1.较简单的处理命令:mv mv 原文件名 新文件名 如:mv myFile newName 将MyFile重命名为newName. 2.linux提供了一个重命名 ...

  4. Linux下重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令 mv ———————————— mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a ...

  5. [Linux] Linux中重命名文件和文件夹的方法(mv命令和rename命令)

    原文链接 在Linux下重命名文件或目录,可以使用mv命令或rename命令,这里分享下二者的使用方法. mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子: ...

  6. cmd - 批量重命名文件

    相信大家或多或少都遇到过类似的情况:从网上下载了好多图片(或者其他的文件),这些图片的名字往往都是些乱七八糟的字母数字的组合,我们想要一次性修改几十张上百张的图片的名字应该怎么办呢? 这里有两种方法, ...

  7. [转]【Windows小技巧】批量重命名文件

    注:如果文件名包含空格,命令应写成ren "s0 (1).gif" s001.gif,简而言之,就是加上双引号!!!原因:系统将s0和(1).gif认为是两个参数,再加上后面的s0 ...

  8. Linux shell - 重命名文件和文件夹(mv)

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c

  9. windows dos 批量重命名文件

    描述 在工作中经常出现 在同一目录下有一些 很多相同扩展名的文件但是名字看起来很乱各不同,我们想将它们统一重命名一下统一的格式,如果一个个去改名字太麻烦了. 这里我门就可以使用windows下 dos ...

随机推荐

  1. PHP去除Notice警告提示

    最近刚接触PHP,开发过程中可能会遇到Notice: Use of undefined ……这样的警告提示,可能是代码写的不太规范, 有两种解决途径:关闭 PHP 提示的方法, 搜索php.ini:e ...

  2. intellj idea 如何设置类头注释和方法注释

    intellj idea 如何设置类头注释和方法注释           intellj idea的强大之处就不多说了,相信每个用过它的人都会体会到,但是我们也会被他的复杂搞的晕头转向,尤其刚从ecl ...

  3. Problem G: If We Were a Child Again

    Problem G: If We Were a Child AgainTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submi ...

  4. find: missing argument to `-exec'

    man find 发现 花括号要加 '' find ${LOG_BASE_DIR}$dir/ -type f -mtime +${KEEP_DAYS} -name ${LOG_REG} -exec r ...

  5. URL伪静态设置 (apache2.4)

    ` ` 1.修改apche主配置文件 主要是 #LoadModule rewrite_module modules/mod_rewrite.so 改为 LoadModule rewrite_modul ...

  6. 原理图产生网络表后导进PADS之后,网络乱了的问题

    问题描述:在Orcad中生成的网络表(格式.ASC),导进PADS9.2中(PADS9.2中已有一些元器件),结果报Mixing nets,如下图示. 仔细检查原理图中的这些nets,发现有的有错,有 ...

  7. ubuntu 常用生产环境部署配置测试调优

    1,ubuntu monogdb 安装配置 2,ubuntu jdk1.7,tomcat7安装 3,ubuntu LAMP部署 4,mongodb 远程热备份及恢复 使用自带的mongodump和mo ...

  8. highlight a DOM element on mouse over, like inspect does

    highlight a DOM element on mouse over, like inspect does highlight a DOM element on mouse over, like ...

  9. Installing perl and writing your first perl program in Ubuntu

    Installing perl and writing your first perl program in Ubuntu     Installing perl and writing your f ...

  10. android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框

    本文是自己学习所做笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在Android的UI开发中常常会遇到图片的缩放,就比方记事本,如今的图片都比較 ...