我有一个包含大量文件的目录。这些文件根据以下系统命名:“ 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的问题很多,但所有这些问题似乎都是用在所有文件共享同一主干的情况下。我已经破坏了几个文件以尝试应用这些解决方案)
您希望N
inVar1_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] 删除。
我来说两句