重命名目录在第四个和第六个字符后添加破折号

重命名目录在第四个和第六个字符后添加破折号

我正在尝试重命名几个目录,在第四个和第六个字符后添加破折号。我看了这个帖子如何在 bash 中仅循环目录?并能够成功循环遍历我希望插入破折号的目录。然而看到这个之后重命名文件在第四个和第六个字符后添加破折号我虽然也许可以在目录上使用类似的语法,但这样做后意识到不能那样做。这是我的语法:

for d in */ ; do
      mv “$d" “${d::4}-${d:4:2}-${d:6}"
done

我搜遍了SE,没有看到类似的帖子。如果这个问题在其他地方得到回答,我提前表示歉意。

另外,预先感谢您提供的任何帮助。最好的,乔恩

答案1

使用珀尔的rename重命名所有目录:

rename -n 's/^(.{4})(.{2})/${1}-${2}-/' */

-n当您的测试令人满意时,将其移除。

前任:

$ mkdir foobarbase{a..c}
$ rename -n 's/(.{4}) # 1st capture group
               (.{2}) # 2nd capture group
              /${1}-${2}-/x' foobar*
rename(foobarbasea, foob-ar-basea)
rename(foobarbaseb, foob-ar-baseb)
rename(foobarbasec, foob-ar-basec)

如果你想保留你的代码,请用 ascii 双引号替换:"

答案2

我将字符更改为"

for d in */ ; do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done

我的目录的

#ls
fooobar1   fooobar2  fooobar4  fooobar6  fooobar8
fooobar10  fooobar3  fooobar5  fooobar7  fooobar9

和运行后

#ls
fooo-ba-r10  fooo-ba-r3  fooo-ba-r5  fooo-ba-r7  fooo-ba-r9
fooo-ba-r1  fooo-ba-r2   fooo-ba-r4  fooo-ba-r6  fooo-ba-r8

您的代码更改所有目录和文件的名称,但如果您只更改目录名称,请使用以下代码:
find * -maxdepth 0 -type d  | while read d
do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done
阅读@ilkkachu 评论

相关内容