在bash中以动态名称重命名文件



我正在尝试重命名所有包含"名称"的文件。

因此,此文件" 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,您正在运行两个程序- bashmv-每个文件。>

(如果您在多计算机上,使用GNU parallel而不是xargs,您可以通过这种方法进一步提高性能)

您可以使用基于Perl的rename命令:

Name=Search
rename "s/^Name/$Name/" *

相关内容

  • 没有找到相关文章

最新更新