003_將一目錄下所有的文件的擴展名改爲bak

Linux的shell 中 %% *的含義
testfile=/dir1/dir2/dir3/test.file.txt

可以用${ }分別替換得到不同的值:

${testfile#*/}:刪掉第一個 / 及其左邊的字符串:dir1/dir2/dir3/test.file.txt

${testfile##*/}:刪掉最後一個 / 及其左邊的字符串:test.file.txt

${testfile#*.}:刪掉第一個 . 及其左邊的字符串:file.txt

${testfile##*.}:刪掉最後一個 . 及其左邊的字符串:txt

${testfile%/*}:刪掉最後一個 / 及其右邊的字符串:/dir1/dir2/dir3

${testfile%%/*}:刪掉第一個 / 及其右邊的字符串:(空值)

${testfile%.*}:刪掉最後一個 . 及其右邊的字符串:/dir1/dir2/dir3/test.file

${testfile%%.*}:刪掉第一個 . 及其右邊的字符串:/dir1/dir2/dir3/test

記憶方法爲:

# 是 去掉左邊(鍵盤上#在 $ 的左邊)
%是去掉右邊(鍵盤上% 在$ 的右邊)
單一符號是最小匹配;兩個符號是最大匹配

${testfile:0:5}:提取最左邊的 5 個字節:/dir1
${testfile:5:5}:提取第 5 個字節右邊的連續5個字節:/dir2

也可以對變量值裏的字符串作替換:
${testfile/dir/path}:將第一個dir 替換爲path:/path1/dir2/dir3/test.file.txt
${testfile//dir/path}:將全部dir 替換爲 path:/path1/path2/path3/test.file.txt


將一目錄下所有的文件的擴展名改爲bak

#! /bin/bash
#${testfile%%.*}:刪掉第一個 . 及其右邊的字符串
for i in *.*; do 
    mv $i ${i%%.*}.bak
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章