我有很多jpg文件的名稱中包含字母和數字。我想刪除所有字母,例如abc12d34efg.jpg
變爲1234.jpg
。對於for循環我想:通過刪除字母從shell重命名文件
for i in *.jpg; do mv "$i" ...
但我無法找到我想要的命令。
我有很多jpg文件的名稱中包含字母和數字。我想刪除所有字母,例如abc12d34efg.jpg
變爲1234.jpg
。對於for循環我想:通過刪除字母從shell重命名文件
for i in *.jpg; do mv "$i" ...
但我無法找到我想要的命令。
下面是一個使用tr
for f in *.jpg ; do n="$(echo ${f} | tr -d a-zA-Z)" ; mv "$f" "${n}jpg" ; done
有了一些格式化它看起來就像是
for f in *.jpg ; do
n="$(echo ${f} | tr -d a-zA-Z)"
mv "$f" "${n}jpg"
done
這裏是發生了什麼事一個ONELINE解決方案:
首先我們從刪除所有字母名字使用tr -d a-zA-Z
。從abc12d34efg.jpg
我們得到1234.
(末尾有一個點,因爲.
不屬於a-z
和A-Z
間隔),並將此值分配給變量$n
。 T
然後我們可以將$f
重命名爲${n}jpg
。而已。
更新同時刪除小寫和大寫字母使用tr -d a-zA-Z
,只刪除小寫字母使用tr -d a-z
代替。
謝謝!它的工作原理,但我必須執行另一個大寫字母Cicle,無論如何非常好的解釋! – druido82
@ druido82歡迎來到Stack Overflow。如果答案解決了您的問題,歡迎您通過勾選答案旁邊的複選標記來接受答案。 –
隨着殼參數擴展:
for fname in *.jpg; do mv "$fname" "${fname//[[:alpha:]]}jpg"; done
"${fname//[[:alpha:]]}"
是[[:alpha:]]
(任何字母)的所有出現什麼也沒有的取代。因爲這也刪除了jpg
,我們必須再次添加它–附加jpg
這樣做。
您可以使用sed將所有字母都替換爲正則表達式。
for i in *.jpg; do mv $i `echo $i | sed -e 's/[a-zA-Z]//g'`jpg; done
如果文件名包含空格,將會失敗 –
有點脫離主題,但可以是有用的:有一個名爲mmv的命令,它爲您的目標服務,沒有數據丟失的風險。 – linuxfan