Mac / Linux Shell 批量重命名的方法总览

Linux Shell 批量重命名的方法总览  php

0、用相似 GPRename 这样的图形软件进行批量重命名
shell

一、删除全部的 .bak 后缀:bash

rename 's/\.bak$//' *.bakspa

二、把 .jpe 文件后缀修改成 .jpg:code

rename 's/\.jpe$/\.jpg/' *.jpe对象

三、把全部文件的文件名改成小写:blog

rename 'y/A-Z/a-z/' *字符串

四、将 abcd.jpg 重命名为 abcd_efg.jpg:io

for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; donefor循环

五、将 abcd_efg.jpg 重命名为 abcd_lmn.jpg:

for var in *.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg"; done

六、把文件名中全部小写字母改成大写字母:

for var in `ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`; done

七、把格式 *_?.jpg 的文件改成 *_0?.jpg:

for var in `ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0" $2}'`; done

八、把文件名的前三个字母变为 vzomik:

for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`; done

九、把文件名的后四个字母变为 vzomik:

for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`; done

10. 把.txt变成.txt_bak 的后缀

ls *.txt|xargs -n1 -i{} mv {} {}_bak

xargs -n1 –i{} 相似for循环,-n1意思是一个一个对象的去处理,-i{} 把前面的对象使用{}取代,mv {} {}_bak 至关于 mv 1.txt 1.txt_bak

find ./*.txt -exec mv {} {}_bak \;  

这个命令中也是把{}做为前面find出来的文件的替代符,后面的”\”为”;”的脱意符,否则shell会把分号做为该行命令的结尾.

========================================================================

既然要批量替换文件名,那么确定得用一个for循环依次遍历指定目录下的每一个文件。对于每一个文件,假如该文件的名称为name.oldext,那么咱们必须原始文件名中挖出name,再将它与新的文件扩展名newext拼接造成新的文件名name.newext。依照这样的思路,就诞生了下面的脚本:

#!/bin/bash
oldext="JPG"
newext="jpg"
dir=$(eval pwd)
for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        done
echo "change JPG=====>jpg done!"

        下面对针对这个程序做简单说明:

1.变量oldext和newext分别指定旧的扩展名和新的扩展名。dir指定文件所在目录;

2.“ls $dir | grep .$oldext”用来在指定目录dir中获取扩展名为旧扩展名的全部文件;

3.在循环体内先利用cut命令将文件名中“.”以前的字符串剪切出来,并赋值给name变量;接着将当前的文件名重命名为新的文件名。

        经过这个脚本,全部照片的扩展名都成功修改。为了使这个脚本更具备通用型,咱们能够增长几条read命令实现脚本和用户之间的交互。改进版的脚本以下:

#!/bin/bash
read -p "old extension:" oldext
read -p "new extension:" newext
read -p "The directory:" dir
cd $dir
for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        echo "$name.$oldext ====> $name.$newext"
        done
echo "all files has been modified."

        修改后的脚本能够批量修改任意扩展名。

from: http://edsionte.com/techblog/archives/category/shell%e7%bc%96%e7%a8%8b

相关文章
相关标签/搜索