【发布时间】:2020-12-21 21:16:43
【问题描述】:
我想重命名以“Test”开头的特定文件夹中包含的所有文件夹,替换为“Product”。 例子: 在我的主文件夹中,我有以下文件夹:
Test1
Test2
Test3
....
我想将它们重命名为:
Product1
Product2
Product3
...
【问题讨论】:
标签: linux
我想重命名以“Test”开头的特定文件夹中包含的所有文件夹,替换为“Product”。 例子: 在我的主文件夹中,我有以下文件夹:
Test1
Test2
Test3
....
我想将它们重命名为:
Product1
Product2
Product3
...
【问题讨论】:
标签: linux
据我正确理解,您不想“递归”重命名文件,但您想重命名多个文件。
也许这样做不是最好的方法,但我会这样做:
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/
当Test 被Products 替换时,此命令打印文件名。如果文件名($a)是Test123,该命令将打印Products123。
mv $a `<some command>`
此命令重命名文件$a。新文件名是由命令<some command> 打印的文本。
如果您真的想递归地执行重命名(在所有子目录中),您可以使用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 工具,所以我不确定这是否真的有效。
【讨论】: