linux文件重命名

renamephp

命令用字符串替換的方式批量改變文件名。html

語法
rename(參數)
參數
原字符串:將文件名須要替換的字符串;
目標字符串:將文件名中含有的原字符替換成目標字符串;
文件:指定要改變文件名的文件列表。
實例
將main1.c重命名爲main.clinux

rename main1.c main.c main1.c
rename**支持通配符**正則表達式

? 可替代單個字符
* 可替代多個字符
[charset] 可替代charset集中的任意單個字符
文件夾中有這些文件foo1, …, foo9, foo10, …, foo278shell

若是使用rename foo foo0 foo?,會把foo1到foo9的文件重命名爲foo01到foo09,重命名的文件只是有4個字符長度名稱的文件,文件名中的foo被替換爲foo0。測試

若是使用rename foo foo0 foo??,foo01到foo99的全部文件都被重命名爲foo001到foo099,只重命名5個字符長度名稱的文件,文件名中的foo被替換爲foo0。spa

若是使用rename foo foo0 foo*,foo001到foo278的全部文件都被重命名爲foo0001到foo0278,全部以foo開頭的文件都被重命名。.net

若是使用rename foo0 foo foo0[2]*,從foo0200到foo0278的全部文件都被重命名爲foo200到foo278,文件名中的foo0被替換爲foo。htm

rename支持正則表達式blog

字母的替換

rename 「s/AA/aa/」 * //把文件名中的AA替換成aa
修改文件的後綴

rename 「s//.html//.php/」 * //把.html 後綴的改爲 .php後綴
批量添加文件後綴

rename 「s/$//.txt/」 * //把全部的文件名都以txt結尾
批量刪除文件名

rename 「s//.txt//」 * //把全部以.txt結尾的文件名的.txt刪掉
如咱們想把文件擴展名爲.bak 的文件擴展名去掉,能夠這樣

$ rename ‘s/.bak$//’ *.bak
*.bak 爲通配符(wildcard),會被shell展開爲各個文件名
去除文件名中的空格

$ rename ‘s/ //g’ *
g 是global的意思,替換全部的空格爲空字符(也就是刪除啦)
文件名轉爲小寫
$ rename ‘y/A-Z/a-z/’ *
使用分組
如今有一堆文件,他們的文件名模式是這樣的第一部分-haha-第二部分.file ,如今要把中間的-haha- 刪去並把第一部分的字符串和第二部分的字符串對調,能夠這樣:
$ rename ‘s/(.)-haha-(.)(.file)/221$3/’ *.file

mv

mv命令既能夠重命名,又能夠移動文件或文件夾。

例子:將目錄A重命名爲B

mv A B

例子:將/a目錄移動到/b下,並重命名爲c

mv /a /b/c

其實在文本模式中要重命名文件或目錄,只須要使用mv命令就能夠了,好比說要將一個名爲abc的文件重命名爲1234:

mv abc 1234

注意,若是當前目錄下也有個1234的文件的話,這個文件是會將它覆蓋的。

批量建立那些規格差很少的文件名。【測試的第一步】

[root@linuxidc net]# for i in `seq -w 10`
> do touch stu\_$i\_linux.jpg
> done
[root@linuxidc net]# sl
total 0
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10_linux.jpg

而後,使用rename進行修改

[root@linuxidc net]# rename \_linux '' *.jpg
[root@linuxidc net]# sl
total 0
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10.jpg

注意,若是想要替換掉下劃線,那麼你不能加任何引號。

建立一些測試文件:

[root@linuxidc net]# for i in `seq -w 10`; do touch stu\_$i\_linux.jpg; done
[root@linuxidc net]# sl
total 0
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_01_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_02_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_03_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_04_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_05_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_06_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_07_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_08_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_09_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:58 stu_10_linux.jpg
[root@linuxidc net]# rename '\_linux' '' *.jpg
[root@linuxidc net]# sl
total 0
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_01_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_02_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_03_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_04_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_05_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_06_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_07_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_08_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_09_linux.jpg
-rw-r--r-- 1 root root 0 Oct 9 21:27 stu_10_linux.jpg

rename版本若是是perl版本的,那rename命令是支持正則的;所以在perl版本的rename下,執行上述命令就能夠成功,若是rename版本是c版本的,那麼上述命令是不成功的。

這個是版本支持的問題,因此沒必要深究。有關二個版本的比較,請參考:linux下rename命令批量重命名中的詳細介紹。

以前的問題多是由於他的rename版本不支持致使的。so,這裏重點說的就是rename,雖然這個命令不是很重要。可是它其實仍是頗有用的,不是嗎?

固然,有人會說,你這個都是在一個目錄下,那我要是在不一樣的目錄下呢?
用兩個命令。一個find先把要修改的文件找出來,再接一個管道,一個rename不就完了嗎?
是的,上述辦法能夠說是一種思路,其實有不少種思路。

附,查看rename版本的信息

[root@linuxidc net]# man rename | head -1
RENAME(1) Linux Programmer’s Manual RENAME(1)

 

 

轉載自:http://www.linuxidc.com/Linux/2015-01/111116.html

         https://blog.csdn.net/w849593893/article/details/82587695

相關文章
相關標籤/搜索