一千萬個為什麽

搜索

不使用** rename **命令重命名文件

我有一個文件目錄, Measurements Panama 2009-03-22 Session1.xml Measurements Panama 2009-03-22 Session2.xml Measurements Panama 2009-03-22 Session3.xml Measurements Panama 2009-03-22 Session4.xml ... Measurements Panama 2009-03-22 Session10.xml

我想刪除空格和 - 短劃線字符。我不想使用重命名命令,因為我不知道perl或正則表達式。從另一篇文章中刪除部分文件名的建議是: for f in *.png; do mv $f ${f#image}; done

這看起來不錯。我無法弄清楚#字符的作用(我認為它會從文件名中刪除字符串“image”?),反正 - 我如何刪除空格和破折號? 我收到一個錯誤,說明文件在做時不是目錄 [jings]s0128943: for f in *.xml; do mv $f ${f//[ -]/};done

mv: target `MeasurementsPanama20090322Session10.xml' is not a directory

mv: target `MeasurementsPanama20090322Session1.xml' is not a directory

等等所有的文件。

最佳答案

您可以在shell的手冊頁中找到 $ {...} 替換的信息,例如 bash的(1)。最常見的: 使用 word 前綴(如果有的話)刪除最短前綴:變量 var 的值。 移除; 刪除最短的後綴:刪除 word 後綴的變量 var 的值(如果有的話) )。

$ {var/pattern/replacement} 刪除模式的首次出現

$ {var//pattern/replacment} 刪除所有出現的模式

因此,在您的示例中, $ {f#image} 展開為 f 的值(例如, image01.png )刪除 image 前綴,因此它會生成該值 <�代碼> 01.png </代碼>。 $ {...} 展開式中的 word 和 replacement 部分是 受制於與文件名相同的通配符擴展;因此, 如果你想刪除空格和 - ,你可以使用 $ {f//[ - ] /} (用空字符串替換任何出現的字符 和 - 。 手冊頁上的所有詳細信息。

轉載註明原文: 不使用** rename **命令重命名文件