溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在shell中利用遞歸遍歷目錄下的所有文件并統(tǒng)一改名

發(fā)布時(shí)間:2021-05-24 16:05:07 來(lái)源:億速云 閱讀:334 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了怎么在shell中利用遞歸遍歷目錄下的所有文件并統(tǒng)一改名,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

如何實(shí)現(xiàn)遍歷?我們寫(xiě)一個(gè)函數(shù):

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 ../ 
}

每次對(duì)新的目錄調(diào)用travFolder方法,首先用ls命令獲得新目錄下的文件名,接下來(lái)這一步很重要,cd這個(gè)新的目錄,因?yàn)槲覀冎皇钦{(diào)用了 這個(gè)函數(shù),其實(shí)還停留在上一層目錄。注意,ls和cd的動(dòng)作不能弄反。

接下來(lái)是怎么對(duì)文件進(jìn)行改名,關(guān)鍵就是sed命令:

function changeName(){
  new=`echo $1|sed 's/^/abc/g'`
  #new=`echo $1|sed -r 's/abc(.*$)/\1/g'`
  #echo $new
  mv $1 $new
}

sed命令支持正則表達(dá)式,我們將文件名作為sed命令的輸入處理,'s/^/abc/g'是替換命令,s是替換處理,格式為s/old/new/g,^表示匹配字符串的開(kāi)始,這個(gè)命令的效果就是在字符串開(kāi)頭插入abc

下一面一句注釋的代碼:

new=`echo $1|sed -r 's/abc(.*$)/\1/g'`

表示把文件名用abc后面的字符替代,這里注意要使用命令-r,表示支持正則表達(dá)式的擴(kuò)展,否則解釋器是識(shí)別不了\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

上述內(nèi)容就是怎么在shell中利用遞歸遍歷目錄下的所有文件并統(tǒng)一改名,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI