如何通过组合三个变量并忽略文件扩展名来批量重命名文件?

破折号

我正在尝试创建一个重命名一组文件的脚本。通常它们将是 TIF,但有时可能会偶尔出现奇怪的问题,所以我想重命名文件并忽略文件扩展名。

文件名将全部相同,中间抛出的纪元时间作为区分符。最终结果将与此类似:

Name1=CLMSFILE

Name2=Epoch

Name3=_A BUNCH OF OTHERTEXT_WITH_A_MIXTURE OF UNDERSCORES AND_SPACES

CLMSFILE53253_A BUNCH OF OTHERTEXT_WITH_A_MIXTURE OF UNDERSCORES AND_SPACES.TIF (or other extension)

这是我目前拥有的

#Rename files and insert epoch time
name1=$CLMSFILE
name2=$(date  +%s%3N)
name3=$_A\ BUNCH\ OF\ OTHERTEXT_WITH_A_MIXTURE\ OF\ UNDERSCORES\ AND_SPACES

for f in *; do
  newname=$name1$name2$name3
  mv -n "$f" "${newname}"
done

运行此之后,我只重命名了第一个文件,但它忽略了第一个变量并且没有扩展名。

1653049404956 _A BUNCH OF OTHERTEXT_WITH_A_MIXTURE OF UNDERSCORES AND_SPACES
220220217SOMEORG20003_01.TIF
220220217SOMEORG30004_01.TIF
管理蜜蜂

您的 shell 脚本中有几个问题会导致您观察到错误:

  1. 你说第一个名字部分是CLSMFILE但是,在您声明的变量分配中,您将名为 的shell 变量name1=$CLMSFILE的内容分配给第一部分,该变量可能不存在,因此为空。部分实际上也是如此,但是您碰巧以 , 开头的字符串,并且在 shell 中具有特殊含义,因此解释在 之后立即停止,并且字符串的其余部分未更改地导入到您的变量中。CLSMFILEname3_$__

  2. 您的脚本会尝试将所有文​​件重命名为相同的名称。幸运的是,您使用了该-n选项,否则您将丢失目录中除最后一个文件之外的所有文件。

    原因是date命令 inname2=$(date ...)在赋值时进行评估,而不是每次使用$name2变量时。所以它对于循环的所有迭代都是恒定的。

  3. 您声明您想要一个文件扩展名,但您忘记为文件添加扩展名。mv重命名整个 filename,而不仅仅是 之前的部分,仅仅是因为文件名中允许有.多个。.

我建议您使用shellcheck,也可作为独立工具使用,以捕获 shell 脚本中的错误。

以下修改应该有效:

name1="CLMSFILE"
name3="_A BUNCH OF OTHERTEXT_WITH_A_MIXTURE OF UNDERSCORES AND_SPACES"

for f in *; do
  basename=${f%.*}
  newbasename="$name1$(date  +%s%3N)$name3"
  newname=${f/$basename/$newbasename}
  mv -n "$f" "${newname}"
done

这使用 shell 字符串操作来

  • 将 的“基本名称”部分$f,即直到最后一个.分隔部分的所有内容,存储在一个变量中$basename
  • 根据您的规则生成新的基本名称,但在date每次循环迭代时运行该命令
  • $basename子字符串$f替换为$newbasename
  • 相应地重命名文件

理想情况下,你会用类似的mv -n ...东西替换零件

echo "Renaming '$f' to '$newname'"

直到您确定名称生成逻辑正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过在文件扩展名之前删除特定字符来批量重命名文件?

批量重命名,无论文件扩展名如何

批量重命名文件名以删除最后一个“-”后的部分,忽略扩展名

如何通过删除扩展名重命名多个文件?

Powershell通过复制最后三个字符来重命名文件

Gulp - 重命名文件扩展名

重命名许多文件的扩展名

(重击)重命名文件扩展名

如何重命名具有不同扩展名的文件

如何同时重命名多个文件扩展名?

如何重命名一堆文件的扩展名?

如何递归重命名文件扩展名

如何使用适当的扩展名重命名文件?

递归批量重命名文件扩展名(Windows批处理)

批量重命名具有未知名称和扩展名的文件

PowerShell批量替换特定字符并重命名文件扩展名

如何通过Batch查找扩展名来设置未知文件名中的变量?

如何通过交换文件名中的子字符串来批量重命名文件?

如何批量添加文件扩展名?

通过忽略文件名中第一个空格后的所有内容来重命名文件

重命名不带文件扩展名的文件

重命名文件而不更改文件扩展名

重命名具有多个文件扩展名的文件

PowerShell重命名文件名并保留扩展名

如何在Linux / Unix中将多个文件从一个扩展名重命名为另一个扩展名?

如何在vbscript中重命名具有相同扩展名的不同命名文件

Python:使用os重命名文件时,如何保留文件扩展名?

如何使用特定扩展名重命名文件夹下的所有文件(递归方法)

重命名在for循环中通过扩展名找到的所有文件