linux下批量修改文件名

0、问题来源,想把一部分文件加上日期序。也就是在文件名称前加上当前的年月日进行输出。

获取日期格式如下

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ date +%Y%m%d

20091112

1、使用find、awk/grep/sed、mv等命令组合来实现

Ubuntu下

利用awk命令进行制作,操作如下

1)找到需要进行操作的文件名

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’ -printf %f\\n|grep -v ^[0-9] |grep -v logo.jpg

se_platform.jpg

soa1.jpg

soa4.jpg

java_primitive_data_type.jpg

soa3.jpg

soa2.jpg

2)提取文件名,保持文件扩展名不变

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’

-printf %f\\n|grep -v ^[0-9] |grep -v logo.jpg|awk -F ‘.’ ‘{print $1}’

se_platform

soa1

soa4

java_primitive_data_type

soa3

soa2

3)对文件进行批量替换操作

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ find -name ‘*.jpg’

-printf %f \\n|grep -v ^[0-9] |grep -v logo.jpg|awk -F ‘.’ ‘{print $1}’|

xargs -i{} mv {}.jpg `date +%Y%m%d`{}.jpg

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ ls

20090818a.jpg                      20090919twitter4.jpg

20090818learn.jpg                  20091110open_project.jpg

20090819java1.png                  20091112java_primitive_data_type.jpg

20090819javaseplatformroadmap.gif  20091112se_platform.jpg

20090916neiji.jpg                  20091112soa1.jpg

20090916waiji.jpg                  20091112soa2.jpg

20090919photo.jpg                  20091112soa3.jpg

20090919twitter.jpg                20091112soa4.jpg

20090919twitter2.jpg               logo.jpg

20090919twitter3.jpg

利用nawk命令进行制作,操作如下

1)找到要操作的文件名

Zianed@ubuntu:~/sedcommand$ find ./ -type f | grep “log” |sed -n ’s/\.\///p’

test2.log

test1.log

2)进行文件名更改操作

Zianed@ubuntu:~/sedcommand$ ls *.log

test1.log  test2.log

Zianed@ubuntu:~/sedcommand$ find ./ -type f | grep “log” |sed -n ’s/.\///p’ |

nawk ‘{oldname=$1;$2=`date +%Y%m%d`$1;newname=$1;print “mv ” oldname ” ” newname }’ | /bin/sh

nawk: warning: escape sequence `\.’ treated as plain `.’

Zianed@ubuntu:~/sedcommand$ ls *.log

test1_test.log  test2_test.log

Zianed@ubuntu:~/sedcommand$

利用sed命令进行制作,操作如下

find / -type f -name “*.sql” | sed s/\(.*\)\.sql/mv & \1.pls/’ | sh

2、编写Shell脚本运行

保存为一个Shell脚本

#!/bin/bash

#script_name:rename_ALL

find ./ -type f | grep “txt” |sed -n ’s/\.\///p’| nawk ‘{oldname=$1;

sub(/\./,”_test\.”);

newname=$1;

print “mv ” oldname ” ” newname }’ | /bin/sh

将上述代码保存为文件rename_ALL

修改脚本的属性,使它能执行:chmod u+x rename_ALL

执行:./rename_ALL

来自网络

看起来很管用,要是能够进行将要改的文件名格式传递进去就更好了。

3、使用rename命令

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ rename –help

Unknown option: help

Usage: rename [-v] [-n] [-f] perlexpr [filenames]

man rename发现,

“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/’ *

命令格式:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

perlexpr 是一种 Perl 脚本格式的正则表达式。

files 文件名通配符

参数:

-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.

强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在的文件。

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ ls

20090819java1.png                  200909v9twitter4.jpg

20090819javaseplatformroadmap.gif  2009vvv0epen_preject.jpg

200908v8lerrn.jpg                  2009vvv2jrvr_primitive_drtr_type.jpg

200908v8r.jpg                      2009vvv2se_plrtferm.jpg

200909v6neiji.jpg                  2009vvv2ser2.jpg

200909v6wriji.jpg                  2009vvv2ser3.jpg

200909v9phete.jpg                  2009vvv2ser4.jpg

200909v9twitter.jpg                2009vvv2serv.jpg

200909v9twitter2.jpg               lege.jpg

200909v9twitter3.jpg

将*.jpg文件名中的09v9改为0919

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ rename ’s/09v9/0919/’ *.jpg

Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ ls

20090819java1.png                  200909v6wriji.jpg

20090819javaseplatformroadmap.gif  2009vvv0epen_preject.jpg

200908v8lerrn.jpg                  2009vvv2jrvr_primitive_drtr_type.jpg

200908v8r.jpg                      2009vvv2se_plrtferm.jpg

20090919phete.jpg                  2009vvv2ser2.jpg

20090919twitter.jpg                2009vvv2ser3.jpg

20090919twitter2.jpg               2009vvv2ser4.jpg

20090919twitter3.jpg               2009vvv2serv.jpg

20090919twitter4.jpg               lege.jpg

200909v6neiji.jpg

rename 的典型应用:

0. 批量更改文件扩展名

$ rename ’s/\.txt/\.ext/’ *

1. 批量删除文件扩展名

$ rename ’s/\.txt//’ *

2. 批量添加文件扩展名

$ rename ’s/$/\.txt/’ *

3. 按自己的方式批量重命名文件

$ rename ’s/(\d)/第$1 章/’ *

$ rename s/_/-/ *.jpg  #修改所有的包含_的.jpg文件中的_为-

linux批量修改 文件名编码,linux下批量修改文件名相关推荐

  1. linux检测文件名编码,Linux下查看文件编码,文件或文件名编码格式转换 | 缥缈的云...

    如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Li ...

  2. linux mysql查看数据库编码_MySQL查看和修改字符编码的实现方法

    MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&g ...

  3. linux echo写php编码,linux使用和基础操作(示例代码)

    1.linux系统初使用 linux有图形终端和字符终端,关于linux学习以字符终端为主,即命令行操作: [root@centos7 ~]#runlevel 查看当前工作模式 N 3 //3为字符终 ...

  4. android 文件名编码,安卓删除纯乱码文件名的文件

    思路简单,做起来不容易. 安卓是linux,利用linux强大的甚至万能的命令行,简单想想就知道很简单.ls,cat ,grep,sed之类的完全可以完成这个任务. 可是在电视 上找不到sed,甚至h ...

  5. linux 修改tomcat编码,修改Tomcat运行时jvm编码问题

    问题: 最近在部署项目的时候出现数据乱码的情况,经过一番查看项目都是用的UTF-8编码格式,数据也是,但是经过调用接口传给对方就乱码了. 由于是部署在Windows环境下,Windows默认编码GBK ...

  6. linux中修改字符编码

    一. ubuntu修改字符编码 1. 添加字符编码,例如zh_CN.UTF-8,有两种方式 方法1:locale-gen zh_CN.UTF-8   #locale-gen命令只在ubuntu中才有 ...

  7. redhat修改mysql编码格式_RedHatLinux下修改MySQL编码方式

    RedHat Linux安装Mysql后其默认编码如下:(运行如下命令即可查看编码方式)# mysql -u root -pEnter password:mysql gt; show RedHat L ...

  8. linux文件属性644到755,linux:644、755、777权限详解

    第一位7等于4+2+1,rwx,所有者具有读取.写入.执行权限: 第二位5等于4+1+0,r-x,同组用户具有读取.执行权限但没有写入权限: 第三位5,同上,也是r-x,其他用户具有读取.执行权限但没 ...

  9. MySQL修改数据库编码

    mysql 命令行下查看各个项目的编码 show variables like 'character_set_%' 这里%是所有的意思,我们可以查看具体某个项目的编码,如 character_set_ ...

最新文章

  1. 在读博士的第八年,她破解了量子计算领域最基本的问题之一
  2. python正则匹配_Python正则表达式初识(五)
  3. 去除Java字符串中的空格
  4. java math 类_Java Math类静态双层(double d)示例
  5. pycharm 激活相关
  6. Jquery瀑布流插件
  7. linux 进程内核栈
  8. 《数据结构》实验报告(一)顺序表基本操作
  9. php hex2bin_PHP bin2hex()函数与示例
  10. 利用简单电阻分压原理自动测量电阻
  11. 【web安全】——文件上传漏洞
  12. 分享如何跟进转化客户,提高成单率
  13. 基于“二元”分析法的企业信息管理的架构:“三个Table的ERP”
  14. 35岁职业危机本质是什么
  15. CCV1.5 屏幕校正点删减调节
  16. 【IoT】NB-IoT模块对接移动oneNET平台流程
  17. 关于两种常用特殊字符判断方法
  18. SD-WAN是面向分支机构的新兴、不断发展的解决方案
  19. 阿里云图像搜索服务--以图搜图,拍立淘功能实现
  20. [转] 日语一级二级听力常用词汇

热门文章

  1. SVN查找某个作者的
  2. ahp层次分析法_层次分析法在历史街区研究中的应用简析
  3. AddressSanitizer原理解析
  4. STM32F407 TFT电阻触摸屏 四点校准法
  5. 数据仓库建设-数仓分层
  6. [GWCTF 2019]pyre 1
  7. Kotlin学习day03
  8. AcrelCloud-9500电瓶车充电桩收费平台 在苏州市某拆迁小区的应用
  9. GitHub 6大热门实时人脸识别开源项目!哪个最适合初级开发者?
  10. NVIDIA rtx3070显卡驱动、算力和cuda版本匹配关系