去除特定字符
# 目標:將 2017-01-01.jpg萍启、2018-01-01.jpg 改為 20170101.jpg干跛、20180101.jpg
# 方法:將所有 - 替換為空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed 's/-//g'`
mv $file $newfile
done
中間插入字符
# 目標:將 book01.txt、paper02.txt 改為 book-01.txt软瞎、paper-02.txt
# 方法:用分組匹配分別獲取待插入位置兩側(cè)的字符串志电,再通過反向引用實現(xiàn)替換
for file in `ls | grep .txt`
do
newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
mv $file $newfile
done
文件名包含空格的解決方法
要解決這個問題曙咽,我們可以將 IFS(內(nèi)部字段分隔符)設(shè)置為換行符 \n,這樣一來挑辆,for 循環(huán)就會按行來獲取變量的值,確保每次獲取的確實是一個完整的文件名孝情。
# 設(shè)置 IFS 變量的命令需要放在 for 循環(huán)之前:
IFS=$'\n'
for file in `ls`
do
...
done
例如鱼蝉,將所有大于1M,且后綴為txt或jpg的文件箫荡,由形如 book_20170101.txt魁亦、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg羔挡,代碼如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
mv $file $newfile
done