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

Mik*_*ike 1 bash file-rename

我有类似的文件:alien-skull-2224154.jpg snow-birds-red-arrows-thunderbirds-blue-angels-43264.jpg dead-space-album-1053.jpg

如何在bash中删除bash之前的"ID"字符串id始终用前一个单词" - "分隔谢谢.

Ste*_*eve 5

这是使用bash参数替换的一种方法:

for i in *.jpg; do mv "$i" "${i%-*}.jpg"; done
Run Code Online (Sandbox Code Playgroud)

或者对于更一般的情况(即,如果您有其他文件扩展名),请尝试:

for i in *.*; do mv "$i" "${i%-*}.${i##*.}"; done
Run Code Online (Sandbox Code Playgroud)

结果:

alien-skull.jpg
dead-space-album.jpg
snow-birds-red-arrows-thunderbirds-blue-angels.jpg
Run Code Online (Sandbox Code Playgroud)

根据下面的评论,尝试这个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
Run Code Online (Sandbox Code Playgroud)

请注意,您需要取消注释值,k具体取决于您希望如何格式化文件名.如果取消注释第一行,则只会增加重复的基本名称:

dead-space-album.jpg
dead-space-album-1.jpg
dead-space-album-2.jpg
dead-space-album-3.jpg
Run Code Online (Sandbox Code Playgroud)

如果取消注释第二行,您将获得以下内容:

alien-skull-0.jpg
alien-skull-1.jpg
alien-skull-2.jpg
alien-skull-3.jpg
Run Code Online (Sandbox Code Playgroud)