gpt4 book ai didi

command-line - 在awk中使用多个字段分隔符重命名多个文件

转载 作者:行者123 更新时间:2023-12-01 23:11:34 24 4
gpt4 key购买 nike

我需要将以下文件同样从 PFSI4C.CSC.CCC.FSIContractData20211008.zip 重命名为 TFSI4C.CSC.CCC .FSIContractData20211104.zip.

每个文件名都应以“T”开头,以当前系统日期 + .zip 结尾

我正在尝试遍历文件,它看起来像这样:

for FILENAME in PFSI4C.CSC.CCC.FSIContractData20211008; do
NEW_FILENAME_HEADER=`echo $FILENAME | awk -F "." '{ print $1"."$2"."$3 }'` # which would takes PFSI4C.CSC.CCC.
NEW_FILENAME_SUFFIX=`echo $FILENAME | awk -F "[.|Data20]" '{ print "."$4 }'` # this part where I can't figure out to take only "FSIContract"
NEW_FILENAME="${NEW_FILENAME_HEADER}.""${NEW_FILENAME_SUFFIX}""Data20""${DATE}".zip" # which should make "TFSI4C.CSC.CCC.FSIContractData20211104.zip."
mv $FILENAME $NEW_FILENAME
done

仅供引用 $DATE 在我们的脚本中定义如下:DATE='date +'%y%m%d' 例如 211104

提前致谢!

最佳答案

使用 Perl 的 rename 命令,您可以尝试以下代码。我在这里使用 -n 选项在 DRY RUN 模式下测试它,它只会打印文件名,从文件名(当前)到文件名(必需的)将被更改;一旦您对显示的输出感到满意,请删除代码中的 -n 。此外,DATE 变量 (DATE='20211104') 是一个 shell 变量,其中包含新文件名中需要的日期值。

rename -n 's:^.(.*)\d{8}(\.zip)$:T$1$2:; s:\.zip$:'"$DATE"'.zip:' *.zip

输出如下:

rename(PFSI4C.CSC.CCC.FSIContractData20211008.zip, TFSI4C.CSC.CCC.FSIContractData20211104.zip)

重命名代码解释:

  • -n:在 DRY RUN 模式下运行 rename 命令。
  • s:^.(.*)\d{8}(\.zip)$:T$1$2:;:在 rename 中运行第一组替换代码。它创建 2 个捕获组,第一个捕获组包含从第二个字符开始到前 8 位数字的所有内容,第二个捕获组在文件名末尾包含 .zip。根据要求将其替换为 T1$2
  • s:\.zip$:'"$DATE"'.zip::在 rename 代码中运行第二组替换。其中 .zip$ 带有 shell 变量 DATE 以及根据要求的 .zip。

关于command-line - 在awk中使用多个字段分隔符重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69842832/

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