Linux Shell腳本攻略學習總結:三
根據擴展名切分文件名
首先,我們先來看兩個例子:
[delphi]
file_jpg="sample.jgp"
name=${file_jpg%.*}
echo File name is : $name
輸出結果:
File name is sample
[delphi]
extension=${file_jpg#*.}
echo Extension is : $extension
輸出結果:Extension is : jpg
工作原理
在第一個任務中,為了從“名稱.擴展名”中取得文件的名字,我們使用了%操作符
${$var%.*}的含義是:
1.從$var中刪除位於%右側的通配符所匹配的字符串。通配符從右向左進行匹配
2.給var賦值,所以結果會輸出文件名
%屬於非貪婪操作。它從右向左找出匹配通配符的最短結果。還有一個操作符 %% 。這個操作符與 % 相似,但行為模式確實貪婪的,這意味著它會匹配符合條件的最長的字符串。
在第二個任務中,原理是和 % 相似的,只是它的運行過程是從左到右。
操作符 ## 則用 *. 從左到右執行貪婪匹配。
下圖展示一個例子:
其中 URL=“www.google.com”
批量重命名文件
下面這個例子實現的是批量處理文件重命名操作,支持的格式豐富:
首先,我們需要在目錄下放置測試的圖片,如下圖所示:
其中rename.sh就是實現功能的腳本文件,我們運行腳本程序,得到如下所示的輸出:
我們再來看看文件的狀態是不是真的改變了:
下面給出實現的腳本程序:
[delphi]
#!/bin/bash
#rename.sh
count=1;
for img in *.[jJ][pP][gG] *.[pP][nN][gG]
do
new=image-$count.${img##*.}
mv "$img" "$new" 2> /dev/null
if [ $? -eq 0 ]
then
echo "Renaming $img to $new"
let count++;
fi
done