繁体   English   中英

bash:截断文件名,增加重复的数字

[英]bash: Truncate filenames, adding incrementing number for duplicates

我想缩短给定位置的所有文件名,并且在截断产生重复的地方,在文件名中包含一个递增的数字。 由于这个解决方案,我大部分时间都在那里: bash:截断文件名,保持它们唯一

我做了一个小的修改,允许它覆盖多个文件扩展名(因为原始文件只是为 jpegs 编写的)。 我的脚本:

num=1
length=8
for file in *
do
    newname=$file
    extension=${file: -4}
    until [[ ! -f $newname ]]
    do
        (( sublen = length - ${#num} ))
        printf -v newname '%.*s%d' "$sublen" "$file" "$num"
        (( num++ ))
    done
    mv "$file" "$newname""$extension"
done

原始文件列表:

DumbFilename.txt
DumbFilename2.txt
DumbFilename3.txt
GrossFilename.txt
GrossFilename2.txt
GrossFilename3.txt
LongFilename.doc
LongFilename2.doc
LongFilename3.doc
UglyFilename.doc
UglyFilename2.doc
UglyFilename3.doc

Output 来自上述代码:

DumbFil1.txt
DumbFil2.txt
DumbFil3.txt
GrossFi4.txt
GrossFi5.txt
GrossFi6.txt
LongFil7.doc
LongFil8.doc
LongFil9.doc
UglyFi10.doc
UglyFi11.doc
UglyFi12.doc

我唯一的问题是数字以一个长序列递增。 我只希望它为重复的每个实例增加,如下所示:

DumbFil1.txt
DumbFil2.txt
DumbFil3.txt
GrossFi1.txt
GrossFi2.txt
GrossFi3.txt
LongFil1.doc
LongFil2.doc
LongFil3.doc
UglyFil1.doc
UglyFil2.doc
UglyFil3.doc

我该如何 go 关于这个?

请您尝试以下方法:

length=8
for file in *; do
    newname=$file
    extension=${file: -4}
    for (( num=1; ; num++ )); do
        (( sublen = length - ${#num} ))
        printf -v newname '%.*s%d%s' "$sublen" "$file" "$num" "$extension"
        [[ ! -f $newname ]] && break
    done
    mv -- "$file" "$newname"
done

顺便说一句,您的原始脚本在附加扩展名的情况下检查$newname的存在,这会在某些情况下中断。

将截断的文件名放入变量中。 在下一次迭代中,检查当前截断的文件名是否与前一个相同。 如果不同,请将num重置为1以重新开始序列。

length=8
num=1
last_truncated=
for file in *
do
    newname=$file
    extension=${file: -4}
    until [[ ! -f $newname ]]
    do
        (( sublen = length - ${#num} ))
        truncated=${newname:0:$sublen}
        # reset $num with new prefix
        if [[ $truncated != $last_truncated ]]
        then num=1
        fi
        newname=$truncated$num
        (( num++ ))
    done
    last_truncated=truncated
    mv "$file" "$newname""$extension"
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM