當前位置:
首頁 > 最新 > 利用sed批量更改文件名

利用sed批量更改文件名

GIF/37K

示例去除特定字元

目標:將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg

方法:將所有 替換為空

這裡使用sed進行標準輸出的字元串替換,其通用格式如下:

上述示例中,在末尾添加g用於替換所有匹配項,而不僅僅替換第一個匹配項。

中間插入字元

目標:將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt

方法:用分組匹配分別獲取待插入位置兩側的字元串,再通過反向引用實現替換

分析

上述示例首先通過 和 命令得到待改名的文件列表,然後用 命令進行字元串的替換,最後再使用 命令來完成文件名的更改。

獲取待改名文件列表的方法有很多,可以通過 find 命令,也可以直接給出字元串,我們將在下文中提到。

注意 for 循環後面的 ,這條命令用兩個反單引號括了起來,與 的作用相同,被包圍的字元串會被當作命令執行,然後返回字元串結果。

文件名包含空格的解決方法

我們可以直接將文件列表寫到 for 循環中,而不是通過命令來得到,例如:

可以看到 for 循環是通過空格來分割字元串,因此如果待更改的文件名中包含空格的話,就會被拆分成多個文件名,從而出錯。

要解決這個問題,我們可以將 IFS(內部欄位分隔符)設置為換行符 ,這樣一來,for 循環就會按行來獲取變數的值,確保每次獲取的確實是一個完整的文件名。

設置 IFS 變數的命令需要放在 for 循環之前:

也可以直接使用 while read 命令一次讀取一行到變數 file 中:

使用 find 獲取文件列表

之前的示例中,我們是通過 命令來獲取文件列表。該命令只能獲取某個目錄的文件,而且沒法進行多種條件的篩選。

而一說到文件的查找,不得不提到功能強大的 find 命令。該命令可以在多個層次的目錄中查找文件,並能夠設定諸如創建時間、文件大小、所有者等多種條件,查找起文件來特別方便靈活。

用 find 命令來獲取文件列表,再用 sed 命令配合正則表達式來修改文件名,這兩個命令的結合幾乎能完成所有常見的批量改名任務。

例如,將所有大於1M,且後綴為txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg,代碼如下:


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP技術大全 的精彩文章:

PHP與大數據開發實踐
yii2中行為和Trait的區別
關於PHP的錯誤機制總結
SecLists-安全測試者的手冊
2017 最新 PHP 框架橫向對比

TAG:PHP技術大全 |