gpt4 book ai didi

regex - Linux用bash脚本重命名多个文件+添加后缀

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:55 26 4
gpt4 key购买 nike

我提到我已经检查过关于使用 bash 脚本重命名文件的类似问题,但没有人帮助我解决这个问题。

我需要按照以下规则重命名目录中的许多文件:按字母顺序列出当前文件,然后用给定的基本名称替换它们的名称,添加一个作为当前文件索引的后缀,然后添加给定的扩展名。

我在索引文件时遇到问题。例如,如果我有 1000 个文件,执行脚本后它们的名称应该是 file0001.ext, file0002.ext ... file0010.ext ... file0099.ext ... file 0100.ext ... file0999 .ext,file1000.ext

我已经为每个文件计算了所需的零数,但我不知道如何在 mv commnad 中使用正则表达式来实现该规则。下面是我的脚本代码:

#!/bin/bash

nod=0

i=1
nof=$(ls -v $3 | wc -l)
cpy=$nof
while [ $cpy -gt 0]
do
nod=$((nod+1))
cpy=$((cpy/10))
done
for a in $(ls -v $3)
do
cpy_of_i=$i
i_digits=0
while [ $cpy_of_i -gt 0 ]
do
i_digits=$((i_digits+1))
cpy_of_i=$((cpy_of_i/10))
done
nr_zeros=$((nod-i_digits))
old=$3$a
new=$(echo $3$1[0]\*{nr_zeros}$i.$2)
mv $old $new
i=$((i+1))
done

注意:第一个参数是新文件名,第二个参数是新扩展名,第三个参数是包含要重命名的文件的目录。因此,将从命令行使用类似于以下的命令调用脚本:./rename.sh new_file pdf/home/dir/something/

最佳答案

只需在变量中保留一个计数器,在处理每个文件后使用算术表达式递增它。使用带有 printf 的命令替换来创建零填充数字。

new=$1
ext=$2
dir=$3

id=1
for file in "$dir"/* ; do
mv "$file" "$dir/$new"$(printf '%04d' $id)."$ext"
(( id++ ))
done

如果您不想使用不同的扩展名重命名文件,您可能只需要重命名 "$dir"/*."$ext"

关于regex - Linux用bash脚本重命名多个文件+添加后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com