概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等。文本主要为你讲解如何实现这些操作
1、删除所有的 .bak 后缀:
rename 's/\.bak$//' *.bak
注意,这个命令的格式组织如下:s/ \.bark$ / / 是s/para1/para2/ 这个有点想sed的语法,将para1匹配的字符串换成para2
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
其中,此处涉及到shell的字符串匹配操作:
1> ${variable#pattern}
如果pattern匹配variable的开始部分,从variable的开始处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。
2> ${variable##pattern}
如果pattern匹配variable的开始部分,从variable的开始处删除字符直到最后一个匹配的位置,包括匹配部分,返回剩余部分。
3> ${variable%pattern}
如果pattern匹配variable的结尾部分,从variable的结尾处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。
4> ${variable%%pattern}
如果pattern匹配variable的结尾部分,从variable的结尾处删除字符直到最后一个匹配的位置,包括匹配部分,返回剩余部分。
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
tr:traslate or delete characters
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
参考:
文本来源:谁不小心的CSDN博客:linux文件操作——批量重命名
gzip
压缩后的格式为:*.gz
这种压缩方式不能保存原文件;且不能压缩目录
命令举例:
#压缩
[root@localhost tmp]# gzip buodo
[root@localhost tmp]# ls
buodo.gz
#解压
[root@localhost tmp]# gunzip buodo.gz
[root@localhost tmp]# ls
buodo
tar
命令选项:
-z(gzip) 用gzip来压缩/解压缩文件
-j(bzip2) 用bzip2来压缩/解压缩文件
-v(verbose) 详细报告tar处理的文件信息
-c(create) 创建新的档案文件
-x(extract) 解压缩文件或目录
-f(file) 使用档案文件或设备,这个选项通常是必选的。
命令举例:
#压缩
[root@localhost tmp]# tar -zvcf buodo.tar.gz buodo
[root@localhost tmp]# tar -jvcf buodo.tar.bz2 buodo
#解压
[root@localhost tmp]# tar -zvxf buodo.tar.gz
[root@localhost tmp]# tar -jvxf buodo.tar.bz2
zip
与gzip相比:1)可以压缩目录; 2)可以保留原文件;
选项:
-r(recursive) 递归压缩目录内的所有文件和目录
1
命令举例:
#压缩和解压文件
[root@localhost tmp]# zip boduo.zip boduo
[root@localhost tmp]# unzip boduo.zip
#压缩和解压目录
[root@localhost tmp]# zip -r Demo.zip Demo
[root@localhost tmp]# unzip Demo.zip
bzip2
压缩后的格式:.bz2
参数
-k 产生压缩文件后保留原文件
1
命令举例
#压缩
[root@localhost tmp]# bzip2 boduo
[root@localhost tmp]# bzip2 -k boduo
#解压
[root@localhost tmp]# bunzip2 boduo.bz2
今天又有同学问linux下怎样批量更改文件后缀名,这个问题被别人问到三次了,所以这里给出几个解决方法
一.rename解决
1. 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
注意,第三种方案是递归的更改,会更改当前目录下及其子目录下所有匹配文件
6.重命名中间某个字符
如我想将Locust _223_344.fq.gz 改为ZHDH_223_344.fq.gz
可用
sudo rename Locust ZHDH *
7.删除含有特定字符的行"sed“使用”
比如a1.txt
BH_1
bH_2
sed -e '/_2/d' a1.txt > a2.txt
BH_1
8.重命名一个文件
mv re.txt rename.txt