2019-05-05 16:49:05 2834瀏覽
對Linux開發(fā)技術(shù)感興趣或者是從事Linux開發(fā)技術(shù)的小伙伴是否知道如何把某個目錄下的每個文件統(tǒng)一在名字前加上”abc”,用shell實現(xiàn)呢?下面就隨Linux培訓(xùn)小編來了解一下吧。
首先分析,一個目錄下除了文件,還可能存在目錄,這里可以看出需要有遞歸操作,如果是文件直接改名,目錄則進入然后進行遍歷。
如何實現(xiàn)遍歷?我們寫一個函數(shù):
每次對新的目錄調(diào)用travFolder方法,首先用ls命令獲得新目錄下的文件名,接下來這一步很重要,cd這個新的目錄,因為我們只是調(diào)用了 這個函數(shù),其實還停留在上一層目錄。注意,ls和cd的動作不能弄反。
接下來是怎么對文件進行改名,關(guān)鍵就是sed命令:
sed命令支持正則表達式,我們將文件名作為sed命令的輸入處理,'s/^/abc/g'是替換命令,s是替換處理,格式為s/old/new/g,^表示匹配字符串的開始,這個命令的效果就是在字符串開頭插入abc
下一面一句注釋的代碼:
表示把文件名用abc后面的字符替代,這里注意要使用命令-r,表示支持正則表達式的擴展,否則解釋器是識別不了\1為分組這個意思的。
完整代碼如下:
function travFolder(){
#echo "travFolder"
flist=`ls $1`
cd $1
#echo $flist
for f in $flist
do
if test -d $f
then
#echo "dir:$f"
travFolder $f
else
#echo "file:$f"
changeName $f
fi
done
cd ../
}
function changeName(){
new=`echo $1|sed 's/^/abc/g'`
#new=`echo $1|sed -r 's/abc(.*$)/\1/g'`
#echo $new
mv $1 $new
}
new=`echo $1|sed -r 's/abc(.*$)/\1/g'`
#!/bin/bash
function changeName(){
#new=`echo $1|sed 's/^/abc/g'`
new=`echo $1|sed -r 's/abc(.*$)/\1/g'`
#echo $new
mv $1 $new
}
function travFolder(){
echo "travFolder"
flist=`ls $1`
cd $1
#echo $flist
for f in $flist
do
if test -d $f
then
#echo "dir:$f"
travFolder $f
else
#echo "file:$f"
changeName $f
fi
done
cd ../
}
dir=./TestDir
travFolder $dir
以上就是扣丁學(xué)堂Linux在線學(xué)習(xí)小編給大家分享的shell遞歸遍歷目錄下的所有文件并統(tǒng)一改名的方法,希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。
想要學(xué)好Linux開發(fā)小編給大家推薦口碑良好的扣丁學(xué)堂,扣丁學(xué)堂有專業(yè)老師制定的Linux學(xué)習(xí)路線圖輔助學(xué)員學(xué)習(xí),此外還有與時俱進的Linux課程體系和Linux視頻教程供大家學(xué)習(xí),想要學(xué)好Linux開發(fā)技術(shù)的小伙伴快快行動吧。扣丁學(xué)堂Linux技術(shù)交流群:422345477。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】 【掃碼進入Python全棧開發(fā)免費公開課】