shell修改檔案名稱(一)

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   使用   sp   

假如檔案名稱是:time_filename.txt 改成filename_time.txt。例如20111111_me.txt改成me_201111111.txt要如何修改?

1 #! /bin/sh2 for eachfile in `ls -B`3 do4  filename=${eachfile%.txt}5  filehead=`echo $filename | awk -F _ ‘{print $1 }‘`6  filelast=`echo $filename | awk -F _ ‘{print $2 }‘`7  mv $filename.txt ${filelast}_$filehead.txt8 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)的長度)

 

http://www.2cto.com/os/201310/248691.html

http://space.baidu.com.cn/ugo5/blog/item/c550bbc54d1644079c163dbd.html

shell修改檔案名稱(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.