zoukankan      html  css  js  c++  java
  • linux文件重命名

    rename

    命令用字符串替换的方式批量改变文件名。

    语法
    rename(参数)
    参数
    原字符串:将文件名需要替换的字符串;
    目标字符串:将文件名中含有的原字符替换成目标字符串;
    文件:指定要改变文件名的文件列表。
    实例
    将main1.c重命名为main.c

    rename main1.c main.c main1.c
    rename**支持通配符**

    ? 可替代单个字符
    * 可替代多个字符
    [charset] 可替代charset集中的任意单个字符
    文件夹中有这些文件foo1, …, foo9, foo10, …, foo278

    如果使用rename foo foo0 foo?,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

    如果使用rename foo foo0 foo??,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。

    如果使用rename foo foo0 foo*,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。

    如果使用rename foo0 foo foo0[2]*,从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。

    rename支持正则表达式

    字母的替换

    rename “s/AA/aa/” * //把文件名中的AA替换成aa
    修改文件的后缀

    rename “s//.html//.php/” * //把.html 后缀的改成 .php后缀
    批量添加文件后缀

    rename “s/$//.txt/” * //把所有的文件名都以txt结尾
    批量删除文件名

    rename “s//.txt//” * //把所有以.txt结尾的文件名的.txt删掉
    如我们想把文件扩展名为.bak 的文件扩展名去掉,可以这样

    $ rename ‘s/.bak$//’ *.bak
    *.bak 为通配符(wildcard),会被shell展开为各个文件名
    去除文件名中的空格

    $ rename ‘s/ //g’ *
    g 是global的意思,替换所有的空格为空字符(也就是删除啦)
    文件名转为小写
    $ rename ‘y/A-Z/a-z/’ *
    使用分组
    现在有一堆文件,他们的文件名模式是这样的第一部分-haha-第二部分.file ,现在要把中间的-haha- 删去并把第一部分的字符串和第二部分的字符串对调,可以这样:
    $ rename ‘s/(.)-haha-(.)(.file)/221$3/’ *.file

    mv

    mv命令既可以重命名,又可以移动文件或文件夹。

    例子:将目录A重命名为B

    mv A B

    例子:将/a目录移动到/b下,并重命名为c

    mv /a /b/c

    其实在文本模式中要重命名文件或目录,只需要使用mv命令就可以了,比如说要将一个名为abc的文件重命名为1234:

    mv abc 1234

    注意,如果当前目录下也有个1234的文件的话,这个文件是会将它覆盖的。

    批量创建那些规格差不多的文件名。【测试的第一步】

    [root@linuxidc net]# for i in `seq -w 10`
    > do touch stu\_$i\_linux.jpg
    > done
    [root@linuxidc net]# sl
    total 0
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10_linux.jpg

    然后,使用rename进行修改

    [root@linuxidc net]# rename \_linux '' *.jpg
    [root@linuxidc net]# sl
    total 0
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10.jpg

    注意,如果想要替换掉下划线,那么你不能加任何引号。

    创建一些测试文件:

    [root@linuxidc net]# for i in `seq -w 10`; do touch stu\_$i\_linux.jpg; done
    [root@linuxidc net]# sl
    total 0
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_01_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_02_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_03_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_04_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_05_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_06_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_07_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_08_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_09_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_10_linux.jpg
    [root@linuxidc net]# rename '\_linux' '' *.jpg
    [root@linuxidc net]# sl
    total 0
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_01_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_02_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_03_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_04_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_05_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_06_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_07_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_08_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_09_linux.jpg
    -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_10_linux.jpg

    rename版本如果是perl版本的,那rename命令是支持正则的;因此在perl版本的rename下,执行上述命令就可以成功,如果rename版本是c版本的,那么上述命令是不成功的。

    这个是版本支持的问题,所以不必深究。有关二个版本的比较,请参考:linux下rename命令批量重命名中的详细介绍。

    之前的问题可能是因为他的rename版本不支持导致的。so,这里重点说的就是rename,虽然这个命令不是很重要。但是它其实还是很有用的,不是吗?

    当然,有人会说,你这个都是在一个目录下,那我要是在不同的目录下呢?
    用两个命令。一个find先把要修改的文件找出来,再接一个管道,一个rename不就完了吗?
    是的,上述办法可以说是一种思路,其实有很多种思路。

    附,查看rename版本的信息

    [root@linuxidc net]# man rename | head -1
    RENAME(1) Linux Programmer’s Manual RENAME(1)

    转载自:http://www.linuxidc.com/Linux/2015-01/111116.html

             https://blog.csdn.net/w849593893/article/details/82587695

  • 相关阅读:
    Dapper ORM 用法—Net下无敌的ORM(转)
    微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient 以及Oracle 的各种连接方法
    最火的.NET开源项目
    sql日期格式化
    项目失败总结
    C#,往线程里传参数的方法总结
    线程的几种用法
    小程序api-01-abcdefg
    cnpm
    关于mpvue和wafer2-client-sdk的 微信登录失败,请检查网络状态
  • 原文地址:https://www.cnblogs.com/pipiyan/p/10518470.html
Copyright © 2011-2022 走看看