Linux 批次改檔案名稱rename

Linux 是大小寫不同 (case-sensitive) 的系統,所以大小寫不同視為不同的檔案
只要改檔名就解決問題了,但是檔案有好幾百個,一個一個改真是浪費人生啊。
還好 Linux 提供了可以批次改大量檔名的指令 rename。
 
rename 指令是這麼用的:

rename oldname newname files

第一個參數是 "要被替換的字"
第二個參數是 "替換的字"
第三個參數是 "要被替換的檔案"
 
要改副檔名的話,可以下這樣的指令:

rename .txt .html *.txt

如此一來,所有的 .txt 文字檔都會改成 .html。以此類推

rename IMG img *.jpg

把照片的檔名改成小寫。這個指令也可以修改資料夾的名字,端看第三個指令怎麼篩選。

利用 find 指令找到多個符合條件的檔案,並使用 sed 做搜尋取代的動作

find . -type f -exec sed -i 's/cpu/memory/ig' '{}' \;

注意:使用 find 指令搭配 -exec 參數時,最後一個 \; 是非常重要的關鍵,一定要加上才能正常執行。
例子: 我要把目錄夾內所有檔案裡含有:G字串替換成空格(space) 指令如下

find . -type f -exec sed -i 's/:G//ig' '{}' \;

使用 sed 來批次修改

grep old_string -rl ./* | xargs sed -i "s/old_string/new_string/g"
sed -i "s/old_string/new_string/g" grep old_string -rl ./*

例如:

sed -i "s/11/xxx/g" grep 11 -rl ./*
grep xxxx -rl ./* | xargs sed -i "s/x/asdfadsfasdfafd/g"

使用 perl 來批次修改

perl -pi -e 's|old_string|new_string|g' find ./ -type f

例如:

perl -pi -e 's|ISO-8859-1|UTF-8|g' find ./ -type f

ERIC1969

上一篇 Linux 刪除 Delete all root mail
下一篇 航母級120相機 Pentax 645Z 發表會