標籤:
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 批量重新命名的方法總覽