Mac / Linux Shell 批量重新命名的方法總覽

來源:互聯網
上載者:User

標籤:

Linux Shell 批量重新命名的方法總覽  

0、用類似 GPRename 這樣的圖形軟體進行批量重新命名

1、刪除所有的 .bak 尾碼:

rename ‘s/\.bak$//‘ *.bak

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

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

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

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/basholdext="JPG"newext="jpg"dir=$(eval pwd)for file in $(ls $dir | grep .$oldext)        do        name=$(ls $file | cut -d. -f1)        mv $file ${name}.$newext        doneecho "change JPG=====>jpg done!"

        下面對針對這個程式作簡單說明:

1.變數oldext和newext分別指定舊的副檔名和新的副檔名。dir指定檔案所在目錄;

2.“ls $dir | grep .$oldext”用來在指定目錄dir中擷取副檔名為舊副檔名的所有檔案;

3.在迴圈體內先利用cut命令將檔案名稱中“.”之前的字串剪下出來,並賦值給name變數;接著將當前的檔案名稱重新命名為新的檔案名稱。

        通過這個指令碼,所有照片的副檔名都成功修改。為了使這個指令碼更具有通用型,我們可以增加幾條read命令實現指令碼和使用者之間的互動。改進版的指令碼如下:

#!/bin/bashread -p "old extension:" oldextread -p "new extension:" newextread -p "The directory:" dircd $dirfor file in $(ls $dir | grep .$oldext)        do        name=$(ls $file | cut -d. -f1)        mv $file ${name}.$newext        echo "$name.$oldext ====> $name.$newext"        doneecho "all files has been modified."

        修改後的指令碼可以批量修改任意副檔名。

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


Mac / Linux Shell 批量重新命名的方法總覽

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.