linux 批量修改文件名 文件名只保留部分,去掉部分


問題:linux系統中文件名包含中文,導致頁面訪問不了文件。就是上條博客中的解決方法二遺留問題。

文件名中有以下格式:TC2_諾而達銅管(中山)有限公司.pdf ,要改為TC2.pdf,去掉中文部分

 

1、先了解linux 獲取文件名,截取字符串的方法:使用${}。原文地址:https://blog.csdn.net/fengmm521/article/details/78446475

1)${var##*/}

該命令的作用是去掉變量var從左邊算起的最后一個'/'字符及其左邊的內容,返回從左邊算起的最后一個'/'(不含該字符)的右邊的內容

2)${var#*/}

該命令的作用是去掉變量var從左邊算起的第一個'/'字符及其左邊的內容,返回從左邊算起第一個'/'(不含該字符)的右邊部分的內容

3)${var%/*}

該命令的使用是去掉變量var從右邊算起的第一個'/'字符及其右邊的內容,返回從右邊算起的第一個'/'(不含該字符)的左邊的內容

4)${var%%/*}

該命令的使用是去掉變量var從右邊算起的最后一個'/'字符及其右邊的內容,返回從右邊算起的最后一個'/'(不含該字符。

 例子如圖:

 

${}總結

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

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

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

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

--------------------- 本文來自 woodcol 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/fengmm521/article/details/78446475?utm_source=copy 

 

2、批量修改文件名方法:

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

for name in `ls *.pdf`;do mv $name ${name%_*}.pdf;done

解釋說明:‘ls *.pdf’是改目錄下所有的pdf文件,mv  源文件名  替換文件名,${name%_*}:去掉文件名‘_’右邊的字符串,留下左邊的

方法二:sed命令

方法三:rename命令

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

格式:rename  原名  替換名  要改的文件 

原字符串:將文件名需要替換的字符串; 目標字符串:將文件名中含有的原字符替換成目標字符串; 文件:指定要改變文件名的文件列表。

 


免責聲明!

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



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