Linux批量重命名文件
五种方法实现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批量重命名文件的更多相关文章
- linux 批量重命名文件
模拟结果文件路径结构大概是:/当前目录/模型名/字模型名模拟/模拟温度/模拟结果文件. 模拟结果文件命名时相同的.模拟结果文件需要修改模拟结果文件的后缀名. 附shell脚本: find -type ...
- Linux命令行bash批量重命名文件
本文介绍下,在linux下使用shell批量重命名文件的例子,有需要的朋友参考下吧. 在linux中,重命名文件名,需要用到mv命令.如果需要批量重命名名一批文件,就需要写bash脚本或命令行了. 例 ...
- Linux中重命名文件
linux下重命名文件有两种方式: 1.较简单的处理命令:mv mv 原文件名 新文件名 如:mv myFile newName 将MyFile重命名为newName. 2.linux提供了一个重命名 ...
- Linux下重命名文件或文件夹(mv命令与rename命令)
在Linux下重命名文件或目录,可以使用mv命令或rename命令 mv ———————————— mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a ...
- [Linux] Linux中重命名文件和文件夹的方法(mv命令和rename命令)
原文链接 在Linux下重命名文件或目录,可以使用mv命令或rename命令,这里分享下二者的使用方法. mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子: ...
- cmd - 批量重命名文件
相信大家或多或少都遇到过类似的情况:从网上下载了好多图片(或者其他的文件),这些图片的名字往往都是些乱七八糟的字母数字的组合,我们想要一次性修改几十张上百张的图片的名字应该怎么办呢? 这里有两种方法, ...
- [转]【Windows小技巧】批量重命名文件
注:如果文件名包含空格,命令应写成ren "s0 (1).gif" s001.gif,简而言之,就是加上双引号!!!原因:系统将s0和(1).gif认为是两个参数,再加上后面的s0 ...
- Linux shell - 重命名文件和文件夹(mv)
linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c
- windows dos 批量重命名文件
描述 在工作中经常出现 在同一目录下有一些 很多相同扩展名的文件但是名字看起来很乱各不同,我们想将它们统一重命名一下统一的格式,如果一个个去改名字太麻烦了. 这里我门就可以使用windows下 dos ...
随机推荐
- Android学习笔记_点九绘图与软键盘和事件传递
最近项目里遇到的几个小问题,以前只是用吗没有深入看过,现在总结到一起,防止以后这种小问题占用太多时间.还是通过网上别人总结的很多博客学习了,挑选出最易懂明了的. 还有leader很小的问题都不放过,亲 ...
- T-SQL语句中中括号([])的用法是什么,什么时候该用
加了[]是为了防止歧义,使计算机能识别.有些字段可能是关键字,这时候你直接用字段名就会报错,如果加了[]就可以正常执行了
- WebApi服务
WCF 它利用TCP.HTTP.MSMQ等传输协议构建“契约先行”的服务.WCF最初为基于SOAP的服务而设计[xml],繁琐.冗余.慢.沉重 WebApi 基于http协议,轻量级的,支持URL路由 ...
- python 数字类型
数值类型:整型(int)-通常被称为是整型或整数,是正或负整数,不带数点.长整型(long integers)-无限大小的整数,整数最后是一个大写或者小写的L浮点型(floadting point r ...
- nodejs中EventEmitter
在模块events中,定义了一个EventEmitter类,可以使用var EventEmitter = require('events');访问它.基本上所有发送事件的对象都是继承自EventEmi ...
- SQL 时间戳
一直对时间戳这个概念比较模糊,相信有很多朋友也都会误认为:时间戳是一个时间字段,每次增加数据时,填入当前的时间值.其实这误导了很多朋友. 1.基本概念 时间戳:数据库中自动生成的唯一二进制数字,与时间 ...
- SQL Server 内存不足引起的并发症
第一:cpu 1.内存不足就会有频繁的页面调入调出.这个过程是要有cpu的参与的.所以这个要影响cpu! 2.内存不足可能会引有用起执行计划被清除.当起次要执行时.这个就要重编译一次!
- JDK的目录结构及结构图
-bin目录: JDK开发工具的可执行文件 -lib目录: 开发工具使用的归档包文件 -jre: Java 运行时环境的根目录,包含Java虚拟机,运行时的类包和Java应用启动器, ...
- crtmpserver初探
前言 Adobe的FMS(Flash Media Server)是很好用.但对应着分级授权的是money和有限功能开放.商业的东西既然用不起,也阻碍了我们的技术进步,那就只能求助于开源社区 ...
- POJ 3693 Maximum repetition substring(后缀数组+ST表)
[题目链接] poj.org/problem?id=3693 [题目大意] 求一个串重复次数最多的连续重复子串并输出,要求字典序最小. [题解] 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+ ...