系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux rename命令

Linux rename命令文件重命名的用法匯總(2)

時間:2014-12-09 11:27:00 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20141208/32097.html 手機(jī)查看 評論

  網(wǎng)上流程的兩個去空格的版本:

  1) tr 版:

  find 。 -type f -name “* *” -print |

  while read name; do

  na=$(echo $name | tr ‘ ’ ‘_’)

  if [[ $name != $na ]]; then

  mv “$name” $na

  fi

  done

  這個版本以前我一直用的,不知道哪個網(wǎng)上搜刮來的,當(dāng)時還沒有系統(tǒng)的學(xué)習(xí)過 tr/sed/awk命令。

  注解一下,很好理解, find 。 type f -name “* *” -print 這一句是查找當(dāng)前目錄下所有類型為普通文件的 并且名字之中含有空格的文件,并打印出來,其實(shí) find默認(rèn)就是打印的 這個 -print 多余了,然后 通過管道傳輸給 while 循環(huán)讀取,文件名放到 name 變量里,用 tr 命令 替換空格為 下劃線。 下面判斷如果執(zhí)行后的名稱不相同,使用 mv 命令重命名。但這個if判斷可有可無,因?yàn)閒ind已經(jīng)查詢了所有文件名中含有空格的,那么經(jīng)過 tr 命令后, $na變量肯定不等于 $name 變量的。

  所以這段代碼可以簡化:

  find 。 -type f -name “* *” |

  while read name; do

  na=$(echo $name | tr ‘ ’ ‘_’)

  mv “$name” “$na”

  done

  tr 可以看著是 sed 的一個精簡版本,tr 用下劃線來替換空格。

  還有一個 是 sed 版本實(shí)現(xiàn):

  for f in *;do mv “$f” `echo “$f” | sed ‘s/[ ]\+/_/g’ `; done

  這里的 sed表達(dá)式還可以這樣寫:

  sed ‘s/[[:space:]]\+/_/g’

  不過記住,sed里的出現(xiàn)一次或多次的加號是需要添加反斜杠的。即:\+

  這樣就可以了。

  好了,這兩種辦法都太***羅嗦了,看看rename實(shí)現(xiàn)吧:

  rename ‘s/[ ]+/_/g’ *

  OK就這么簡單。

  方括號內(nèi)的空格可以用 [:space:]代替,

  即可以寫成 ‘s/[[:space:]]+/_/g’

  這里注意,rename 采用的是標(biāo)準(zhǔn)perl正則語法,所以無須將 加號轉(zhuǎn)變?yōu)榉葱备芗犹?。即 + 不能修改為 \+,否則替換失敗。

  還有幾個好玩的例子:

  比如統(tǒng)一在文件頭部添加上 hello

  rename ‘s/^/hello/’ *

  統(tǒng)一把.html擴(kuò)展名修改為 .htm

  rename ‘s/.html$/.htm/’ *

  統(tǒng)一在尾部追加 .zip后綴:

  rename ‘s/$/.zip/’ *

  統(tǒng)一去掉.zip后綴:

  rename ‘s/.zip$//’ *

  規(guī)則化數(shù)字編號名,比如 1.jpg, 2.jpg …。。 100.jpg , 現(xiàn)在要使文件名全部三位即 1.jpg …。 001.jpg

  運(yùn)行兩次命令:

  rename ‘s/^/00/’ [0-9].jpg

  # 這一步把 1.jpg 。。。。。 9.jpg 變幻為 001.jpg 。。。。 009.jpg

  rename ‘s/^/0/’ [0-9][0-9].jpg

  # 這一步把 10.jpg 。。。。。 99.jpg 變幻為 010.jpg 。。。。。 090.jpg

  Ok ,rename就研究了這么多,暫時不知道如何在rename中引入動態(tài)變量,比如 $i++

  我測試過 i=0; rename -n “s/^.*$/$((++i))/” * 執(zhí)行后i被自增了1,并非想我想像中那樣,可以在每操作一個文件自增一,猜想可能是因?yàn)閞ename批量實(shí)現(xiàn)的,導(dǎo)致++i只計算一次!

  -n 用來測試rename過程,并不直接運(yùn)行,可以查看測試效果后,然后再運(yùn)行。

  上面就是Linux下rename命令的用法介紹了,rename命令有兩個版本,目前大部分使用的是Perl版本,你在使用該命令的時候要先檢查下你使用的是哪個版本,以免出現(xiàn)錯誤。

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨(dú)特見解

立即評論

以上留言僅代表用戶個人觀點(diǎn),不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

官方交流群 軟件收錄