[英]Renaming files from shell by removing letters
我有很多jpg文件,其名稱中包含字母和數字。 我想刪除所有字母,例如abc12d34efg.jpg
變成1234.jpg
。 對於for循環,我認為:
for i in *.jpg; do mv "$i" ...
但是我找不到想要的命令。
使用shell參數擴展:
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
這是一個使用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
這是正在發生的事情:
首先,我們使用tr -d a-zA-Z
從名稱中刪除所有字母。 從abc12d34efg.jpg
我們得到1234.
(在末端的一個點.
不會在屬於az
和AZ
間隔),並指定這個值變量$n
。 Ť
然后,我們可以將$f
重命名$f
${n}jpg
。 而已。
更新以刪除小寫字母和大寫字母,請使用tr -d a-zA-Z
,僅刪除小寫字母,請使用tr -d az
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.