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

相關文章
相關標籤/搜索