我想重命名包含在以“测试”开头的特定文件夹中的所有文件夹,并以“产品”代替。 例: 在主文件夹中,有以下文件夹:
Test1
Test2
Test3
....
我想将它们重命名为:
Product1
Product2
Product3
...
答案 0 :(得分:0)
据我的正确理解,您不想“递归”重命名文件,但是想重命名多个文件。
也许这不是最好的方法,但我会这样:
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
我不知道答案之一中提到的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
工具,所以我不确定这是否真的有用。