我想重命名包含在以“测试”开头的特定文件夹中的所有文件夹,并用“产品”代替。示例:在主文件夹中,有以下文件夹:
Test1
Test2
Test3
....
我想将它们重命名为:
Product1
Product2
Product3
...
据我正确理解,您不想“递归”重命名文件,但是您想重命名多个文件。
也许这不是最好的方法,但我会这样做:
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
工具,所以我不确定这是否真的有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句