linux批量改名命令 linux 批量文件重命名

linux系統(tǒng)下怎么批量重命名

網(wǎng)站上傳的500多張圖片后發(fā)現(xiàn)需要區(qū)分縮略圖,大圖,中圖。但是之前上傳的沒(méi)有區(qū)分,無(wú)奈之下只能省事的辦法了,總不能一張一張的修改吧。寫(xiě)一段bash,使用mv命令達(dá)到批量重命名的目的。例子:我現(xiàn)在要把a(bǔ)aaaaaaaaaaaa.jpg重命名為aaaaaaaaaaaaa_MED.jpg請(qǐng)使用如下命令:for i in *.jpg;do mv "$i" "${i%.jpg}_MED.jpg" ;done同理aaaaaaaaaaaaa_MED.jpg重命名為aaaaaaaaaaaaa_LRG.jpg的方法:for i in *.jpg;do mv "$i" "${i%_MED.jpg}_LRG.jpg" ;done

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、貢嘎ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的貢嘎網(wǎng)站制作公司

Linux系統(tǒng)中給文件改名的命令是什么/?

linux的文件重命名非常簡(jiǎn)單。常用的是mv命令和rename命令。下面介紹一下這兩個(gè)命令的用法,具體結(jié)節(jié)可以參考手冊(cè)。

1、mv

mv fromfile tofile

如把文件a.txt得命名為b.txt,可以是mv a.txt b.txt。

mv一次只能重命名一個(gè)文件,而且,它是移動(dòng)命令。如果tofile已經(jīng)存在的話,會(huì)直接裝原文件覆蓋,從而造成文件的丟失。當(dāng)然有選項(xiàng)可以對(duì)已存在的文件進(jìn)行提示,但是,我表示,那個(gè)選項(xiàng)我還真不常用。綜合這兩點(diǎn)考慮,還是決定看看rename吧。

2、rename

rename frompart topart filename 或者 rename 's/frompart/topart/' filename

如把文件a.txt得命名為b.txt,可以是rename 'a' 'b' a.txt (這個(gè)沒(méi)有試過(guò),看網(wǎng)上別人說(shuō)的,是這樣子的。)還可以是:rename 's/^a/b/' a.txt

在有的系統(tǒng)之上,用前面的那句可以通過(guò),在有的系統(tǒng)之上,用后面的這個(gè)可以通過(guò)。兩個(gè)不一樣,一個(gè)是C的,一個(gè)是perl的。明顯看出,后面這條是正則表達(dá)式的寫(xiě)法。具體采用哪一種方式,可以man rename,在手冊(cè)頁(yè)的最后一行看版本。由于我使用的系統(tǒng)rename的版本是Perl的,所以我只能采用后面的這一種方式。

rename 強(qiáng)大 的地方在于,你可以使用*,?等,對(duì)所有符合條件的文件名進(jìn)行批量修改。而你在使用mv的時(shí)候,只能采用寫(xiě)腳本,用循環(huán)的方式來(lái)解決。

linux下開(kāi)發(fā)腳本搜索子目錄批量更改文件名

前言

本文主要給大家介紹了關(guān)于Linux shell用sed批量更改文件名的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

示例

去除特定字符

目標(biāo):將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg

方法:將所有 - 替換為空

for file in `ls | grep .jpg`

do

newfile=`echo $file | sed 's/-//g'`

mv $file $newfile

done

這里使用sed進(jìn)行標(biāo)準(zhǔn)輸出的字符串替換,其通用格式如下:

stdout | sed 's/pattern/replace/'

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

中間插入字符

目標(biāo):將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt

方法:用分組匹配分別獲取待插入位置兩側(cè)的字符串,再通過(guò)反向引用實(shí)現(xiàn)替換

for file in `ls | grep .txt`

do

newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`

mv $file $newfile

done

分析

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

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

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

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

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

for file in "file1 file2 file3"

do

...

done

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

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

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

IFS=$'\n'

for file in `ls`

do

...

done

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

ls | grep "*.txt" | while read file

do

...

done

使用 find 獲取文件列表

之前的示例中,我們是通過(guò) ls 命令來(lái)獲取文件列表。該命令只能獲取某個(gè)目錄的文件,而且沒(méi)法進(jìn)行多種條件的篩選。

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

用 find 命令來(lái)獲取文件列表,再用 sed 命令配合正則表達(dá)式來(lái)修改文件名,這兩個(gè)命令的結(jié)合幾乎能完成所有常見(jiàn)的批量改名任務(wù)。

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

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

Linux下批量修改文件名

Linux下修改文件名有mv和rename。 其中mv命令只能對(duì)單個(gè)文件重命名 , 這是mv命令和rename命令的在重命名方面的根本區(qū)別。

linux的rename命令有兩個(gè)版本,一個(gè)是c語(yǔ)言版本的,一個(gè)是perl語(yǔ)言版本的,判斷方法:

輸入man rename 看到第一行是:

RENAME(1) Linux Programmer’s Manual RENAME(1)

這個(gè)就是C語(yǔ)言版本的

而如果出現(xiàn):

RENAME(1) Perl Programmers Reference Guide RENAME(1) 則是Perl版本的了

C語(yǔ)言版本格式:rename 原字符串 新字符串 文件名

Perl語(yǔ)言版本格式:rename 's/原字符串/新字符串/' 文件名

rename支持正則表達(dá)式

例子:

字母的替換 rename "s/AA/aa/" * // 把文件名中的AA替換成aa

修改文件的后綴 rename "s//.html//.php/" * // 把.html 后綴的改成 .php后綴

批量添加文件后綴 rename "s/$//.txt/" * // 把所有的文件名都以txt結(jié)尾

批量刪除文件名 rename "s//.txt//" * // 把所有以.txt結(jié)尾的文件名的.txt刪掉

在文件夾shell下創(chuàng)建文件10個(gè)文件

touch tmp_{1..10}.txt

找到含有“_“”的文件夾。

find ./ -name "*_*"

讀取id, 用mv改名,$為自己理解為賦值后的id,格式為

名稱欄目:linux批量改名命令 linux 批量文件重命名
標(biāo)題來(lái)源:http://bm7419.com/article48/dohhcep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站制作云服務(wù)器、商城網(wǎng)站定制網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)