我正在尝试重命名所有包含"名称"的文件。
因此,此文件" samisomething"应该看起来像这样的"搜索"。但是下面的脚本只是从文件名中删除了"名称"。
name='search'
Name='Search'
find ../../$name-module -name 'Name*' -type f -exec bash -c 'mv "$1" "${1/Name/$Name}"' -- {} ;
您必须导出名称,因为否则,命令查找不会将变量$名称继承到其环境中。所以:
name='search'
export Name='Search'
find ../../$name-module -name 'Name*' -type f -exec bash -c 'mv "$1" "${1/Name/$Name}"' -- {} ;
您可以逃脱报价,无需出口:
find ../../$name-module -name 'Name*' -type f -exec bash -c "mv "$1" "${1/Name/$Name}"" -- {} ;
您可以使用查找要重命名的文件列表,然后将其输送到另一个程序进行重命名。
例如,您可以做:
find ../../$name-module -print0 -name 'Name*' -type f |
xargs -0 rename "s/Name/$Name/"
- 无需出口(丑陋 可能会影响其他命令)
- 重命名可能只能运行一次(如果所有发现的文件适合一个命令行)(使用
-exec
,您正在运行两个程序-bash
和mv
-每个文件。>
(如果您在多计算机上,使用GNU parallel
而不是xargs
,您可以通过这种方法进一步提高性能)
您可以使用基于Perl的rename
命令:
Name=Search
rename "s/^Name/$Name/" *