国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統(tǒng)進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統(tǒng) - Linux - Linux shell利用sed如何批量更改文件名詳解

Linux shell利用sed如何批量更改文件名詳解

2022-02-17 19:46Wray Zheng Linux

最近在學習shell,為了練習sed,寫了個簡單的批量修改文件名的腳本,所以下面這篇文章主要給大家介紹了關于Linux shell利用sed如何批量更改文件名的相關資料,需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

本文主要給大家介紹了關于Linux shell用sed批量更改文件名的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

示例

去除特定字符

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

方法:將所有 - 替換為空

?
1
2
3
4
5
for file in `ls | grep .jpg`
do
 newfile=`echo $file | sed 's/-//g'`
 mv $file $newfile
done

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

?
1
stdout | sed 's/pattern/replace/'

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

中間插入字符

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

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

?
1
2
3
4
5
for file in `ls | grep .txt`
do
 newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
 mv $file $newfile
done

分析

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

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

注意 for 循環(huán)后面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字符串會被當作命令執(zhí)行,然后返回字符串結果。

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

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

?
1
2
3
4
for file in "file1 file2 file3"
do
 ...
done

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

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

設置 IFS 變量的命令需要放在 for 循環(huán)之前:

?
1
2
3
4
5
IFS=$'\n'
for file in `ls`
do
 ...
done

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

?
1
2
3
4
ls | grep "*.txt" | while read file
do
 ...
done

使用 find 獲取文件列表

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

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

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

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

?
1
2
3
4
5
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
 newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
 mv $file $newfile
done

有關 find 命令的更多用法,可以參考 http://www.jfrwli.cn/article/217260.html

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.codebelief.com/article/2017/09/linux-shell-rename-multiple-files-using-sed/

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人高清视频在线观看 | 久久精品香蕉 | 国产一区二区三区不卡在线观看 | 亚洲成人免费影院 | 亚洲在线一区 | 91国产精品 | 欧美福利电影在线观看 | 国产在线网站 | 午夜视频免费在线观看 | 国产综合精品一区二区三区 | 91精品国产福利在线观看 | 久久久国产精品 | 中文字幕一二三区 | 精品动漫一区 | 成人亚洲视频 | 九九国产 | 成人免费看黄色 | 亚洲综合射 | 日韩国产在线 | 激情视频网站 | 日韩一二三 | 日韩欧美在线一区二区 | 亚洲欧美影院 | 国产成人免费视频 | 亚洲精品久久久久久久久久吃药 | 亚洲成人网一区 | 黄色资源网站 | 欧美精品一区二区视频 | 毛片在线视频 | 一区二区中文 | av网站免费看 | 精品久久久久久久久久久久久久 | 久久国产综合 | 欧美色图一区 | 久久国产精品一区二区 | 欧美1页| 日韩片一区 | 九九在线国产视频 | 国产精品无码久久久久 | 亚洲精品粉嫩美女一区 | 精品国产三级 |