linux sed名宁,Linux shell利用sed批量更改文件名的方法
微子網(wǎng)絡(luò)與大家分享了在Linux shell中使用sed批量更改文件名的方法。希望你看完這篇文章有所收獲。大家一起討論一下。
示例
去除特定字符
目標(biāo):把2017-01-01.jpg和2018-01-01.jpg變成20170101.jpg和20180101.jpg
方法:用空值替換全部
for filein ` ls | grep . jpg ` s
做
newfile=`echo$file|sed的/-//g ' `
mv$file$newfile
在此完成,sed用于替換標(biāo)準(zhǔn)輸出的字符串,其一般格式如下:
Stdout|sed的/pattern/replace/'在上面的示例中,在末尾添加了G以替換所有匹配項,而不僅僅是第一個匹配項。
中間插入字符
目標(biāo):把book-01.txt和紙-02.txt改成book-01 . txt和紙-02.txt。
方法:利用組匹配獲取待插入位置兩側(cè)的字符串,然后用反向引用替換
for filein ` ls | grep . txt ` s
做
newfile=`echo$file|sed的/\([a-z]\ \)\([0-9]\ \)/\1-\2/' '
mv$file$newfile
完成分析
在上面的例子中,要重命名的文件列表是通過ls和grep命令獲得的,然后用sed命令替換字符串,最后用mv命令更改文件名。
有很多方法可以得到要重命名的文件列表,比如find命令或者直接字符串,后面會提到。
注意ls | grep。for循環(huán)后的txt。該命令包含在兩個反單引號中,其功能與$(ls | grep)相同。txt)。封閉的字符串將作為命令執(zhí)行,然后返回字符串結(jié)果。
文件名包含空格的解決方法
我們可以將文件列表直接寫入for循環(huán),而不是通過命令獲取,例如:
對于文件“文件1文件2文件3”
做
.
Done可以看到for循環(huán)按空格拆分字符串,所以如果要更改的文件名包含空格,就會被拆分成多個文件名,導(dǎo)致錯誤。
為了解決這個問題,我們可以將IFS(內(nèi)部字段分隔符)設(shè)置為一個新的行字符\n,這樣for循環(huán)就會逐行獲取變量的值,保證每次都得到一個完整的文件名。
設(shè)置IFS變量的命令需要放在for循環(huán)之前:
IFS=$'\n '
forfilein`ls
做
.
完成也可以直接使用while read命令一次讀取一行到變量文件中:
ls|grep'*。txt“| while readfile”
做
.
完成使用 find 獲取文件列表
在前面的例子中,我們使用ls命令來獲取文件列表。這個命令只能獲取某個目錄的文件,不能按多個條件過濾。
說到文件搜索,不得不提功能強(qiáng)大的find命令。該命令可以在多級目錄中查找文件,并可以設(shè)置創(chuàng)建時間、文件大小、所有者等各種條件。查找文件特別方便靈活。
使用find命令獲取文件列表,然后使用sed命令用正則表達(dá)式修改文件名。這兩個命令的組合可以完成幾乎所有常見的批量重命名任務(wù)。
例如,所有大于1M且后綴為txt或jpg的文件都從book_20170101.txt和image_20170101.jpg格式的文件重命名為20170101-book.txt和20170101-image.jpg,代碼如下:
forfilein`find。-大小1M-名稱' *_*。txt'-o-name'*_*。jpg ' ` s
做
newfile=`echo$file|sed的/\([a-z]\ \)_\([0-9]\ \)。/\2-\1./'`
mv$file$newfile
讀完這篇文章,done相信你已經(jīng)對Linux shell中使用sed批量更改文件名的方法有了一定的了解。如果您想了解更多相關(guān)知識,請關(guān)注微子網(wǎng)絡(luò),感謝您的閱讀!
總結(jié)
以上是生活随笔為你收集整理的linux sed名宁,Linux shell利用sed批量更改文件名的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python web环境傻瓜搭建_pyt
- 下一篇: pg10 10.3 1 linux64,