重命名目录中的所有文件以添加前导零-用于具有不同“词根”的文件名

鲍比M

我有一个包含大量文件的目录。这些文件根据以下系统命名:“ Var1_X_Var2_Y_Var3_Z_data_N.txt”其中X,Y和Z是许多不同的数字,N的范围是1到30。

要在下一个脚本中使用这些文件,我需要为N为1到9的文件添加前导零。

在我的ubuntu机器上,我使用以下命令

rename  's/_1.txt/_01.txt/' *

并从1到9重复此操作。
但是,此命令在我正在使用的群集上不起作用。我需要unix或bash或python替代方案。

(注意:我知道关于stackexchange的问题很多,但所有这些问题似乎都是用在所有文件共享同一主干的情况下。我已经破坏了几个文件以尝试应用这些解决方案)

库萨兰达

您希望NinVar1_X_Var2_Y_Var3_Z_data_N.txt是一个零填充的两位整数。

假设所有受影响的文件都符合以下格式*_[0-9].txt

for name in *_[0-9].txt; do
    stem="${name%.txt}"    # remove the ".txt" suffix
    num=${stem##*_}        # extract the number at the end
    newname="${stem%[0-9]}$( printf '%02d.txt' "$num" )" # put it back together

    printf 'Would rename "%s" into "%s"\n' "$name" "$newname"
    # mv -- "$name" "$newname"
done
  • ${name%.txt}.txt$name原始文件名的末尾删除这样就创建了“ stem”,它并不是真正的词根,因为它的末尾仍然有数字。
  • ${stem##*_}删除之前的所有下划线,包括其中的最后一个下划线$stem
  • ${stem%[0-9]}是没有数字结尾的词干(例如Var1_X_Var2_Y_Var3_Z_data_)。
  • printf '%02d.txt' "$num"从产生一个零位填充的两位数字$num,后跟字符串.txt

给定一个包含文件的目录

Var1_X_Var2_Y_Var3_Z_data_1.txt              Var1_X_Var2_Y_Var3_Z_data_23.txt
Var1_X_Var2_Y_Var3_Z_data_10.txt             Var1_X_Var2_Y_Var3_Z_data_24.txt
Var1_X_Var2_Y_Var3_Z_data_11.txt             Var1_X_Var2_Y_Var3_Z_data_25.txt
Var1_X_Var2_Y_Var3_Z_data_12.txt             Var1_X_Var2_Y_Var3_Z_data_26.txt
Var1_X_Var2_Y_Var3_Z_data_13.txt             Var1_X_Var2_Y_Var3_Z_data_27.txt
Var1_X_Var2_Y_Var3_Z_data_14.txt             Var1_X_Var2_Y_Var3_Z_data_28.txt
Var1_X_Var2_Y_Var3_Z_data_15.txt             Var1_X_Var2_Y_Var3_Z_data_29.txt
Var1_X_Var2_Y_Var3_Z_data_16.txt             Var1_X_Var2_Y_Var3_Z_data_3.txt
Var1_X_Var2_Y_Var3_Z_data_17.txt             Var1_X_Var2_Y_Var3_Z_data_30.txt
Var1_X_Var2_Y_Var3_Z_data_18.txt             Var1_X_Var2_Y_Var3_Z_data_4.txt
Var1_X_Var2_Y_Var3_Z_data_19.txt             Var1_X_Var2_Y_Var3_Z_data_5.txt
Var1_X_Var2_Y_Var3_Z_data_2.txt              Var1_X_Var2_Y_Var3_Z_data_6.txt
Var1_X_Var2_Y_Var3_Z_data_20.txt             Var1_X_Var2_Y_Var3_Z_data_7.txt
Var1_X_Var2_Y_Var3_Z_data_21.txt             Var1_X_Var2_Y_Var3_Z_data_8.txt
Var1_X_Var2_Y_Var3_Z_data_22.txt             Var1_X_Var2_Y_Var3_Z_data_9.txt

..该循环将产生

Would rename "Var1_X_Var2_Y_Var3_Z_data_1.txt" into "Var1_X_Var2_Y_Var3_Z_data_01.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_2.txt" into "Var1_X_Var2_Y_Var3_Z_data_02.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_3.txt" into "Var1_X_Var2_Y_Var3_Z_data_03.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_4.txt" into "Var1_X_Var2_Y_Var3_Z_data_04.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_5.txt" into "Var1_X_Var2_Y_Var3_Z_data_05.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_6.txt" into "Var1_X_Var2_Y_Var3_Z_data_06.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_7.txt" into "Var1_X_Var2_Y_Var3_Z_data_07.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_8.txt" into "Var1_X_Var2_Y_Var3_Z_data_08.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_9.txt" into "Var1_X_Var2_Y_Var3_Z_data_09.txt"

删除mv循环末尾的注释以实际重命名文件。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

批量重命名目录中的文件

重命名目录的所有内容,且开销最小

如何使用当前目录重命名目录中的文件

Python-使用循环重命名目录中的所有文件

使用Powershell重命名目录中具有给定名称的所有文件夹

根据目录中包含的文本重命名目录中的所有文件

尝试重命名目录中的所有文件时出现FileNotFoundError

重命名目录中的所有文件扩展名

如何重命名目录中所有带有特殊字符和空格的文件?

Powershell脚本重命名目录中的所有文件

如何重命名目录中的所有图像

使用datagridview列值重命名目录中的所有文件名

使用Python重命名目录中的所有文件

如何重命名目录中的所有文件并添加当前unix日期的前缀

如何重命名目录中的所有文件并添加前缀

重命名目录中的所有文件,同时保留任何文件扩展名

重命名目录中的所有文件时,前两个文件上出现警告5和32

重命名目录中的所有文件为默认顺序

重命名目录中的所有文件夹

重命名不同子目录中的所有文件

使用python重命名目录中的所有文件以在每个文件中存在的行

Powershell重命名目录中的所有文件,重命名值来自被重命名的文件

通过省略最后3个字符来重命名目录中的所有文件

bash脚本-重命名目录中包含* space *()*-的所有文件

重命名目录中特定类型的所有文件

如何使用 Python 复制和重命名目录中的所有文件?

重命名目录和子目录中的所有文件

Powershell 重命名目录中的文件

Python,重命名目录中的文件