gpt4 book ai didi

linux - 用于从父文件夹名称重命名多个文件的 Shell 脚本

转载 作者:太空狗 更新时间:2023-10-29 11:25:32 24 4
gpt4 key购买 nike

我有这样的文件结构:

  • 00000010
    • 000000001.file1
    • 000000001.file2
  • 00000020
    • 00000003.file1
    • 00000003.file2
    • 00000003.file3
  • ...

因此,存在 8 位名称的文件夹,其中包含一个或多个名称以 8 位数字开头的文件。但是这些文件名——比方说——不同步。所以现在我尝试在 bash 中递归地重命名它们以存档:

  • 00000010
    • 000000010.file1
    • 000000010.file2
  • 00000020
    • 00000020.file1
    • 00000020.file2
    • 00000020.file3
  • ...

我的脚本确实是这样的:

#! /bin/bash

find * -maxdepth 1 -name "*" -type d | while read -r dir
do
rename 's/$dir\/[0-9]{8}/$dir/' *
done

但这行不通,并给出类似的错误

Global symbol "$dir" requires explicit package name at (eval 1) line 1.

我该如何编写它来根据文件夹名称重命名文件?

谢谢你的帮助!

最佳答案

rename 中使用 " 代替 '

您应该对 $dir 中的文件运行 rename,因此 rename 的参数必须是 $dir/* 而不仅仅是 *

因为你想用 dir/dir 替换 dir/8digits 正则表达式的替换部分应该是 $dir\/$dir

通过上述更改,命令如下所示:

rename "s/$dir\/[0-9]{8}/$dir\/$dir/" $dir/*

关于linux - 用于从父文件夹名称重命名多个文件的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4861208/

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