当前位置首页 > Linux知识

linux下的文件操作——批量重命名

阅读次数:215 次  来源:admin  发布时间:

概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的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 character

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文件操作——批量重命名

gzi

压缩后的格式为:*.gz

这种压缩方式不能保存原文件;且不能压缩目录

命令举例:

#压缩

[root@localhost tmp]# gzip buodo

[root@localhost tmp]# l

uodo.gz

#解压

[root@localhost tmp]# gunzip buodo.gz

[root@localhost tmp]# l

uodo

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

zi

与gzip相比:1)可以压缩目录; 2)可以保留原文件;

选项:

-r(recursive) 递归压缩目录内的所有文件和目录

1

命令举例:

#压缩和解压文件

[root@localhost tmp]# zip boduo.zip boduo

[root@localhost tmp]# unzip boduo.zi

#压缩和解压目录

[root@localhost tmp]# zip -r Demo.zip Demo

[root@localhost tmp]# unzip Demo.zi

zip2

压缩后的格式:.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

可用

udo rename Locust ZHDH *

7.删除含有特定字符的行"sed“使用”

比如a1.txt

BH_1

H_2

ed -e \'/_2/d\' a1.txt > a2.txt

BH_1

8.重命名一个文件

mv re.txt rename.txt

cut 命令使用

cat SULTS.CSV |cut -d "," -f 3

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 -c :以字符为单位进行分割。 -d :自定义分隔符,默认为制表符。[示例以逗号分割] -f :与-d一起使用,指定显示哪个区域。[第三行] -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的

范围之内,该字符将被写出;否则,该字符将被排除

9. 查看文件夹大小

du -h uce

uce为文件夹名

如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=(-d),这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小。

wc [-lmw]

参数说明:

-l :多少行

-m:多少字符

-w:多少字

上一篇:[ubuntu]windows重装以后,恢复grub引导
下一篇:linuxshell执行方式source、sh、bash、./