我正在尝试使用动态名称重命名包含“名称”的所有文件。
所以这个'NameSomething'文件应该看起来像'SearchSomething'。但下面的脚本只是从文件名中删除“名称”。
name='search'
Name='Search'
find ../../$name-module -name 'Name*' -type f -exec bash -c 'mv "$1" "${1/Name/$Name}"' -- {} \;
答案 0 :(得分:3)
您必须导出名称,否则命令find将不会将变量$ Name继承到其环境中。所以:
name='search'
export Name='Search'
find ../../$name-module -name 'Name*' -type f -exec bash -c 'mv "$1" "${1/Name/$Name}"' -- {} \;
答案 1 :(得分:2)
\您可以转义引号,无需导出:
find ../../$name-module -name 'Name*' -type f -exec bash -c "mv \"\$1\" \"\${1/Name/$Name}\"" -- {} \;
答案 2 :(得分:1)
您可以使用find查找要重命名的文件列表,并将其传递给另一个程序进行重命名。
例如,你可以这样做:
find ../../$name-module -print0 -name 'Name*' -type f | \
xargs -0 rename "s/Name/$Name/"
-exec
,您正在运行两个程序 - bash
和mv
- 每个文件。这可能效率低下。(如果您使用的是多核计算机,那么使用Gnu parallel
代替xargs
可以通过此方法进一步提升性能
答案 3 :(得分:0)
您可以使用基于Perl的rename
命令:
Name=Search
rename "s/^Name/$Name/" *