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

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/pipiyan/p/10518470.html
Copyright © 2011-2022 走看看