zoukankan      html  css  js  c++  java
  • linux下的文件操作——批量重命名

     

     

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

    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:多少字

    生物学学渣,转行中,目前在研究生物信息及数据挖掘。如有问题或建议,请多多赐教。
  • 相关阅读:
    codeforces 439C 模拟
    codeforces 435B
    【WebVR】AFrame中的A-sky无法利用src指定路径显示全景图
    【UE4】添加头文件之后VS中UCLASS()报错问题解决办法
    【UE4】蓝图之间的通讯
    git中报unable to auto-detect email address 错误的解决办法
    2017ACM省赛总结与生涯回顾
    hihocoder#1121 : 二分图一•二分图判定
    hihocoder#1039 : 字符消除
    2048low版
  • 原文地址:https://www.cnblogs.com/huangyinger/p/10212490.html
Copyright © 2011-2022 走看看