linux改名字和截取部分文件名


來源於:

https://www.cnblogs.com/lyq863987322/p/8004618.html

https://www.cnblogs.com/ApolloZ/p/11618303.html#:~:text=linux%20%E6%8F%90%E5%8F%96%E6%96%87%E4%BB%B6%E5%90%8D%E5%AD%97%E7%9A%84%E9%83%A8%E5%88%86%E4%BF%A1%E6%81%AF%E6%88%96%E5%8F%98%E9%87%8F%E7%9A%84%E9%83%A8%E5%88%86%E4%BF%A1%E6%81%AF%20%E4%B8%80%E3%80%81%E4%BD%BF%E7%94%A8%24%20%7B%7D%201,%E3%80%81%24%20%7Bvar%23%23%2A%2F%20%7D%20%E8%AF%A5%E5%91%BD%E4%BB%A4%E7%9A%84%E4%BD%9C%E7%94%A8%E6%98%AF%E5%8E%BB%E6%8E%89%E5%8F%98%E9%87%8Fvar%E4%BB%8E%E5%B7%A6%E8%BE%B9%E7%AE%97%E8%B5%B7%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%27%2F%27%20%E5%AD%97%E7%AC%A6%E5%8F%8A%E5%85%B6%E5%B7%A6%E8%BE%B9%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E8%BF%94%E5%9B%9E%E4%BB%8E%E5%B7%A6%E8%BE%B9%E7%AE%97%E8%B5%B7%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%20%27%2F%27%EF%BC%88%E4%B8%8D%E5%90%AB%E8%AF%A5%E5%AD%97%E7%AC%A6%EF%BC%89%E7%9A%84%E5%8F%B3%E8%BE%B9%E7%9A%84%E5%86%85%E5%AE%B9%E3%80%82

 

方法一:mv配合for循環方式進行修改

[root@show day74]# for name in `ls *.html`;do echo $name ${name%.html}.jpg;done
00.html 00.jpg
01.html 01.jpg
02.html 02.jpg
03.html 03.jpg
04.html 04.jpg
05.html 05.jpg
06.html 06.jpg
07.html 07.jpg
08.html 08.jpg
09.html 09.jpg
10.html 10.jpg
[root@show day74]# for name in `ls *.html`;do mv $name ${name%.html}.jpg;done
[root@show day74]# ls 
00.jpg 01.jpg 02.jpg 03.jpg 04.jpg 05.jpg 06.jpg 07.jpg 08.jpg 09.jpg 10.jpg



一、使用${}
1、${var##*/}
該命令的作用是去掉變量var從左邊算起的最后一個'/'字符及其左邊的內容,返回從左邊算起的最后一個'/'(不含該字符)的右邊的內容。使用例子及結果如下:



從運行結果可以看到,使用該命令,可以提取出我們需要的文件名file.txt。

若使用時在shell程序文件中,可以使用變量來保存這個結果,再加以利用,如file=${var##*/}

2、${var##*.}
該命令的作用是去掉變量var從左邊算起的最后一個'.'字符及其左邊的內容,返回從左邊算起的最后一個'.'(不含該字符)的右邊的內容。使用例子及結果如下:



從運行結果可以看到,使用該命令,可以提取出我們需要的文件后綴。

如果文件的后綴不僅有一個,例如,file.tar.gz,命令${var##*.}僅能提取最后一個后綴,而我想提取tar.gz時該怎么辦?那么就要用下面所說的${var#*.}命令了。

3、${var#*.}
該命令的作用是去掉變量var從左邊算起的第一個'.'字符及其左邊的內容,返回從左邊算起第一個'.'(不含該字符)的右邊部分的內容。使用例子及結果如下:



從運行結果可以看到,使用該命令,可以提取出文件的多個后綴。

4、${var%/*}
該命令的使用是去掉變量var從右邊算起的第一個'/'字符及其右邊的內容,返回從右邊算起的第一個'/'(不含該字符)的左邊的內容。使用例子及結果如下:



從運行的結果可以看到,使用該命令,可以提取出我們需要的文件所在的目錄

5、${var%%.*}
該命令的使用是去掉變量var從右邊算起的最后一個'.'字符及其右邊的內容,返回從右邊算起的最后一個'.'(不含該字符)的左邊的內容。使用例子及結果如下:



當我們需要建立一個與文件名相同名字(沒有后綴)的目錄與對應的文件相對應時,就可以使用該命令來進行操作。例如,解壓文件的情況就與此類似,我們壓縮文件file.zip時,會在與file.zip同級目錄下建立一個名為file的目錄。

6、${}總結
其實${}並不是專門為提取文件名或目錄名的,它的使用是變量的提取和替換等等操作,它可以提取非常多的內容,並不一定是上面五個例子中的'/'或'.'。也就是說,上面的使用方法只是它使用的一個特例。

看到上面的這些命令,可能會讓人感到非常難以理解和記憶,其實不然,它們都是有規律的。
#:表示從左邊算起第一個
%:表示從右邊算起第一個
##:表示從左邊算起最后一個
%%:表示從右邊算起最后一個
換句話來說,#總是表示左邊算起,%總是表示右邊算起。

*:表示要刪除的內容,對於#和##的情況,它位於指定的字符(例子中的'/'和'.')的左邊,表於刪除指定字符及其左邊的內容;對於%和%%的情況,它位於指定的字符(例子中的'/'和'.')的右邊,表示刪除指定字符及其右邊的內容。這里的'*'的位置不能互換,即不能把*號放在#或##的右邊,反之亦然。

例如:${var%%x*}表示找出從右邊算起最后一個字符x,並刪除字符x及其右邊的字符。

看到這里,就可以知道,其實該命令的用途非常廣泛,上面只是指針文件名和目錄名的命名特性來進行提取的一些特例而已。

二、basename和dirname
${}並不是專門為提取文件名和目錄名設計的命令,那么basename和dirname命令就是專門為做這一件事而已准備的了。

1、basename

該命令的作用是從路徑中提取出文件名,使用方法為basename NAME [SUFFIX]。

1)從路徑中提出出文件名(帶后綴),例子如下:



2)從上面命令的用法中可以看到,后綴(SUFFIX)是一個可選項。所以,若只想提取出文件名file,而不帶有后綴,還可以在變量的后面加上后綴名,例子如下:



2、dirname
該命令的作用是從路徑中提取出目錄名,使用方法為 dirname NAME
使用例子如下:



這樣就提取出了file.txt文件所在的目錄。

注:該命令不僅能提取出普通文件所的目錄,它能提取出任何文件所在的目錄,例如目錄所在的目錄,如下:



它提取出了目錄dir2所在的目錄dir1.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM