日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux批量修改文件名多目录,Linux下批量修改文件名

發布時間:2023/12/14 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux批量修改文件名多目录,Linux下批量修改文件名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2, Perl 版本的批量重命名,帶有Perl的好處是,你可以使用正則表達式來完成很奇特的功能。

perl 版本的參數格式:

rename? perlexpr files

注意,perl版本的rename只有兩個參數,第一個參數為perl正則表達式,第二個參數為所要處理的文件

man rename的幫助示例:

1) 有一批文件,以 .bak結尾,現在想把這些 .bak 統統去掉。

rename???? 's/\.bak$//'??????? *.bak

這個命令很簡單,因為我還沒有系統學習過perl,我不知道perl里替換字符串是不是這么干的,但sed是這么干的,所以如果你有sed或者tr基礎,很容易明白,這個替換和sed里的正則語法是一模一樣的。

2) 把所有文件名內含有大小字母的,修改為小寫字母。

rename????? 'y/A-Z/a-z/'??????? *

依然和sed的替換語法一樣,不用多解釋,如果看不懂的話,可以系統學習一下sed先。

還有幾個比較實用的例子:

1) 批量去掉文件名里的空格

Linux文件名本來是不支持空格的,不知道什么時候允許了,當然,在命令行調用文件的時候,空格是很有問

題滴,比如你 原來可以直接? mv? oldfile? newfile? 但有空格就不行了 , 得加雙引號: mv "oldfile"

"newfile" 或者用反斜杠轉移? \[] ,這樣還好,但如果你直接把含有空格的圖片名引入

Latex文檔,Latex生成pdf的時候會直接打印出文件名,之前這個問題苦惱了我很久,我生成的pdf怎么老是出現文件名呢?后來才發現原來是文件

名內含有空格的問題!windows系統下生成的文件名是天生含有空格的,雖然很討厭,但有些惠普掃描儀生成的圖片默認就加入了空格,沒有辦法,只好去掉

他,在系統研究rename命令前,我是用 mv 去除空格的。

網上流程的兩個去空格的版本:

1) tr 版:

find . -type f -name "* *" -print |

while read name; do

na=$(echo $name | tr ' ' '_')

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

mv "$name" $na

fi

done

這個版本以前我一直用的,不知道哪個網上搜刮來的,當時還沒有系統的學習過 tr/sed/awk命令。

注解一下,很好理解, find .

type f -name "* *" -print 這一句是查找當前目錄下所有類型為普通文件的 并且名字之中含有空格的文件,并打印出來,其實

find默認就是打印的 這個 -print 多余了,然后 通過管道傳輸給 while 循環讀取,文件名放到 name 變量里,用 tr 命令

替換空格為 下劃線。 下面判斷如果執行后的名稱不相同,使用 mv

命令重命名。但這個if判斷可有可無,因為find已經查詢了所有文件名中含有空格的,那么經過 tr 命令后, $na變量肯定不等于 $name

變量的。

所以這段代碼可以簡化:

find . -type f -name "* *" |

while read name; do

na=$(echo $name | tr ' ' '_')

mv "$name" "$na"

done

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

還有一個 是 sed 版本實現:

for f in *;do mv "$f" `echo "$f" | sed 's/[ ]\+/_/g' `; done

這里的 sed表達式還可以這樣寫:

sed 's/[[:space:]]\+/_/g'

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

這樣就可以了。

好了,這兩種辦法都太他媽羅嗦了,看看rename實現吧:

rename????? 's/[ ]+/_/g'??????? *

OK就這么簡單。

方括號內的空格可以用 [:space:]代替,

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

這里注意,rename 采用的是標準perl正則語法,所以無須將 加號轉變為反斜杠加號

即 + 不能修改為 \+,否則替換失敗。

還有幾個好玩的例子:

比如統一在文件頭部添加上 hello

rename????????? 's/^/hello/'??????? *

統一把.html擴展名修改為 .htm

rename????????? 's/.html$/.htm/'????? *

統一在尾部追加 .zip后綴:

rename????????? 's/$/.zip/'????? *

統一去掉.zip后綴:

rename????????? 's/.zip$//'????? *

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

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

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

總結

以上是生活随笔為你收集整理的linux批量修改文件名多目录,Linux下批量修改文件名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。