Bash:删除名称末尾的数字。

2023-12-10

我有这样的文件: 外星人头骨-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(使用前将#替换为@)

Bash:删除名称末尾的数字。 的相关文章

随机推荐