天天看點

2.13 批量重命名和移動

rename指令利用Perl正規表達式修改檔案名。綜合運用find、rename和mv。

1、用特定的格式重命名目前目錄下的圖像檔案,最簡單的方法是使用下面的腳本:

#!/bin/bash
#檔案名:rename.sh
#用途:重命名.jpg和.png檔案
count=1;
for img in `find . -iname '*.png' -o -iname  '*.jpg' -type f -maxdepth 1`
  do
     new=image-$count.${img##*.}
  echo "Renaming $img to $new"
  mv "$img" "$new"
  let count++
done      

輸出結果:

$./rename.sh

Renaming back.jpg to image-1.jpg

Renaming new.jpg to image-2.jpg

Renaming next.png to image-3.jpg

該腳本将目前目錄下所有的.jpg和.png檔案重命名,新檔案名的格式為image-1.jpg、image-2.jpg等等,

2、工作原理

使用find指令進行搜尋,-o用于指定多個-iname選項,後者用于執行大小寫無關的比對。-maxdepth 1指在目前目錄下進行比對。

為了跟蹤圖像編号,初始化count=1,下一步就是用mv指令重命名檔案。是以需要構造出新的檔案名。${img##*.}對處于目前循環中的檔案名進行解析并獲得檔案擴充名。

let count++用來在每次循環中增加檔案編号,

還有許多其他執行重命名操作的方法,

$ rename *.JPG *.jpg

将檔案名中的空格替換成字元"_"

$ rename 's/  /_/g' *

's/  /_/g' 用于替換檔案名,而*是用于比對目标檔案的通配符,它可以以*.txt或其他樣式出現

轉換檔案名的大小寫

$rename 'y/A-Z/a-z/' *

将所有的.mp3檔案移入給定的目錄

$find path -type f -name "*.mp3" -exec mv {} target_dir \;