构建重命名脚本

构建重命名脚本

编写一个脚本来检查每个文件夹/目录,并重命名文件夹标题(如果它包含单词“section”)。该文件夹应该重命名为使用单词“chapter”而不是“section”;您的脚本应该是递归的,在每个目录、子目录和下层子目录上执行,直到检查并重命名所有子目录。

例如:

supersectiondir-->subsectiondir-->lowersubsectiondir
应该变成:
superchapterdir-->subchapterdir-->lowersubchapterdir

我的尝试(来自 supersectiondir 上面的目录):

find /c/Users/cmd2/supersection -type d -exec sed -i 's/section/chapter/g' {} \; 

$ sh renaming.sh

sed: couldn't edit /c/Users/cmd2/supersection: not a regular file
sed: couldn't edit /c/Users/cmd2/supersection/subsection: not a regular file
sed: couldn't edit /c/Users/cmd2/supersection/subsection/lowersubsection: not a regular file 

答案1

rename工具极其不便携; RHEL/CentOS/Fedora 系列版本rename与 Ubuntu 或 Debian 上的版本几乎没有任何共同点。

我写了一个回答给出两个版本的示例用法rename一会儿回来。

你还没有说你正在使用什么操作系统,所以很难说得很具体——而且既然这是家庭作业,你应该自己做一些作业所以即使你说哪个操作系统我也不会说出答案。

不过,有一些提示:

  • sed运行于内容的一个文本文件;它不会更改文件的名称,当然也不会更改目录的名称。它不能用于此目的,这就是您编写的命令出现错误的原因。
  • 您的命令走在正确的轨道上find
  • 我建议您查找-name-iname运算符,因为find它们可能会派上用场(您不需要尝试重命名与给定模式不匹配的文件)。
  • 使用-execrename适合您的操作系统的版本)可能是最简单/最好的解决方案。

答案2

您可以使用该rename工具。此用例的一个示例是:

rename section chapter *

或者在您的情况下,您可能会通过管道输出 find 的输出。

find . -type d -print | xargs rename section chapter

相关内容