shell修改文件名

原文:http://www.cnblogs.com/eustoma/p/4093529.htmlhtml


#! /bin/bash
for file in `ls`
do
 filename=${file%.jpg}
 filehead=`echo $filename | awk -F _ '{print $1 }'`
 filelast=`echo $filename | awk -F _ '{print $2 }'`
 mv $filename.txt ${filelast}_$filehead.txt
done

說明:

默認你要處理的文件都在一個文件夾裏,後綴都是txt:
第2行就是列出全部的文件,而後對每一個文件進行4-7行的處理;
第4行就是獲取文件名,不包括後綴txt;
而後就是將文件名如下劃線分割爲filehead 和filelast兩部分;
最後就是把源文件重命名爲filelast_filehead.txt。

補充:

shell中的${},##和%%的使用

假設咱們定義了一個變量爲:
file=/dir1/dir2/dir3/my.file.txt

能夠用${ }分別替換獲得不一樣的值:

1. 截斷功能
${file#*/}:刪掉第一個 / 及其左邊的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:刪掉最後一個 /  及其左邊的字符串:my.file.txt
${file#*.}:刪掉第一個 .  及其左邊的字符串:file.txt
${file##*.}:刪掉最後一個 .  及其左邊的字符串:txt
${file%/*}:刪掉最後一個  /  及其右邊的字符串:/dir1/dir2/dir3
${file%%/*}:刪掉第一個 /  及其右邊的字符串:(空值)
${file%.*}:刪掉最後一個  .  及其右邊的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:刪掉第一個  .   及其右邊的字符串:/dir1/dir2/dir3/my

記憶的方法爲:
#是去掉左邊(鍵盤上#在 $ 的左邊),##最後一個;
%是去掉右邊(鍵盤上% 在$ 的右邊),%%第一個。

2. 字符串提取

單一符號是最小匹配;兩個符號是最大匹配
${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續5個字節:/dir2

3. 字符串替換

也能夠對變量值裏的字符串做替換:
${file/dir/path}:將第一個dir 替換爲path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將所有dir 替換爲 path:/path1/path2/path3/my.file.txt

4. 針對不一樣的變量狀態賦值(沒設定、空值、非空值):
${file-my.file.txt}: 若$file沒有設定,則使用my.file.txt做返回值。(空值及非空值時不做處理)
${file:-my.file.txt}:若$file沒有設定或爲空值,則使用my.file.txt做返回值。(非空值時不做處理)
${file+my.file.txt}: 若$file設爲空值或非空值,均使用my.file.txt做返回值。(沒設定時不做處理)
${file:+my.file.txt}:若$file爲非空值,則使用my.file.txt做返回值。(沒設定及空值時不做處理)
${file=my.file.txt}: 若$file沒設定,則使用my.file.txt做返回值,同時將$file 賦值爲 my.file.txt。(空值及非空值時不做處理)
${file:=my.file.txt}:若$file沒設定或爲空值,則使用my.file.txt做返回值,同時將 $file 賦值爲 my.file.txt。(非空值時不做處理)
${file?my.file.txt}: 若$file沒設定,則將my.file.txt輸出至 STDERR。(空值及非空值時不做處理)
${file:?my.file.txt}:若$file沒設定或爲空值,則將my.file.txt輸出至STDERR。(非空值時不做處理)

${#var} 可計算出變量值的長度:
${#file} 可獲得 27,由於/dir1/dir2/dir3/my.file.txt 是27個字節。

注意:
":+"的狀況是不包含空值的.
":-", ":="等只要有號就是包含空值(null)。


5. 變量的長度
${#file}


6. 數組運算
A=(a b c def)
${A[@]} 或 ${A[*]} 可獲得 a b c def (所有組數)
${A[0]} 可獲得 a (第一個組數),${A[1]} 則爲第二個組數...
${#A[@]} 或 ${#A[*]} 可獲得 4 (所有組數數量)
${#A[0]} 可獲得 1 (即第一個組數(a)的長度),${#A[3]} 可獲得 3 (第四個組數(def)的長度)
shell

相關文章
相關標籤/搜索