我有这样的文件:
外星人头骨-2224154.jpg
雪鸟-红色-箭头-雷鸟-蓝色-天使-43264.jpg
死亡空间-album-1053.jpg
如何在 bash 中删除 .jpg 之前的“ID”字符串
id 始终由前面的单词“-”分隔
谢谢。
这是一种使用方法bash 参数替换:
for i in *.jpg; do mv "$i" "${i%-*}.jpg"; done
或者对于更一般的情况(即,如果您有其他文件扩展名),请尝试:
for i in *.*; do mv "$i" "${i%-*}.${i##*.}"; done
Results:
alien-skull.jpg
dead-space-album.jpg
snow-birds-red-arrows-thunderbirds-blue-angels.jpg
根据下面的评论,尝试这个 bash 脚本:
declare -A array
for i in *.*; do
j="${i%-*}.${i##*.}"
# k="$j"
# k="${i%-*}-0.${i##*.}"
for x in "${!array[@]}"; do
if [[ "$j" == "$x" ]]; then
k="${i%-*}-${array[$j]}.${i##*.}"
fi
done
(( array["$j"]++ ))
mv "$i" "$k"
done
请注意,您需要取消注释值k
取决于您想要如何格式化文件名。如果取消第一行的注释,则只会增加重复的基本名称:
dead-space-album.jpg
dead-space-album-1.jpg
dead-space-album-2.jpg
dead-space-album-3.jpg
如果取消第二行的注释,您将得到以下内容:
alien-skull-0.jpg
alien-skull-1.jpg
alien-skull-2.jpg
alien-skull-3.jpg
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)