【问题标题】:how to rename folders recursively in linux [closed]如何在linux中递归重命名文件夹[关闭]
【发布时间】:2020-12-21 21:16:43
【问题描述】:

我想重命名以“Test”开头的特定文件夹中包含的所有文件夹,替换为“Product”。 例子: 在我的主文件夹中,我有以下文件夹:

Test1
Test2
Test3
....

我想将它们重命名为:

Product1
Product2
Product3
...

【问题讨论】:

标签: linux


【解决方案1】:

据我正确理解,您不想“递归”重命名文件,但您想重命名多个文件。

也许这样做不是最好的方法,但我会这样做:

for a in Test*; do mv $a `echo $a | sed -e s/Test/Products/`; done

解释:

for a in Test*; do <some command> ; done

这将为每个匹配Test* 模式的文件执行一些命令。 $a 是文件名的占位符。

echo $a | sed -e s/Test/Products/

TestProducts 替换时,此命令打印文件名。如果文件名($a)是Test123,该命令将打印Products123

mv $a `<some command>`

此命令重命名文件$a。新文件名是由命令&lt;some command&gt; 打印的文本。

如果您真的想递归地执行重命名(在所有子目录中),您可以使用find 命令:

for a in `find . | grep Test`; do ...

编辑

我想重命名文件夹而不是文件

文件夹是Linux中的某种“文件”;您所说的“文件”在Linux中称为“常规文件”。并且上面的命令不区分文件夹和“常规文件”。

因此,如果您的父文件夹不包含任何与名称模式Test* 匹配的“常规文件”(或符号链接或管道...),您可以使用上述命令。

如果您的父文件夹包含与名称模式 Test* 匹配的子文件夹和其他类型的文件(例如“常规文件”或符号链接),并且您只想重命名子文件夹,您可以使用find命令选择当前父文件夹中的所有文件夹:

for a in `find -maxdepth 1 -type d | grep /Test`; do ...

编辑 2

我不知道您的问题的其中一个 cmets 中链接的答案中提到的 rename 命令。而且rename 工具似乎并非在每个 Linux 发行版中都可用。

使用rename,您可能会这样做:

rename Test Product `find -maxdepth 1 -type d`

这将搜索当前目录中的所有子目录,并将名称中的Test 替换为Product。名为MyTest5 的子目录变为MyProduct5

但是,名为Test6 的常规文件不会被重命名。

如果你只想重命名以Test开头的目录,你可以这样做:

rename Test Product `find -maxdepth 1 -type d | grep /Test`

Test5 将变为 Product5 但不会重命名 MyTest5

很遗憾,我自己没有使用过rename 工具,所以我不确定这是否真的有效。

【讨论】:

  • 我想重命名文件夹而不是文件
  • @salconte 请参阅我的两个“编辑”部分。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2020-10-31
  • 2014-08-11
  • 2014-02-07
  • 1970-01-01
  • 2017-08-18
  • 2014-07-12
  • 2015-12-05
相关资源
最近更新 更多