【问题标题】:How to replace recursively part of file name in bash如何在bash中递归替换文件名的一部分
【发布时间】:2016-04-20 19:09:49
【问题描述】:

我有一个目录,其子目录包含名称错误的图像文件,例如 filename.jpg.jpg 我想用 filename.jpg 替换这个递归 我试过了:

find ./ -type f -exec sed -i 's/string1/string2/g' {} \;

sed -i 's/foo/bar/g' *

但没有一个有效

谢谢

【问题讨论】:

  • 我建议你使用rename工具,它对于批量重命名非常强大。

标签: linux bash centos


【解决方案1】:
find ./ -iname "*.jpg.jpg" -exec rename .jpg.jpg .jpg '{}' \;

如果您有一个使用 perl 正则表达式的 rename 实用程序,请使用以下命令:

find ./ -iname "*.jpg.jpg" -exec rename 's/\.jpg\.jpg$/.jpg/' '{}' \;

【讨论】:

  • 我在这里得到以下信息:syntax error at (eval 1) line 1, near "."
  • @volpato:抱歉,这是怎么回事?
  • @volpato:你有使用 Perl 正则表达式的rename 命令(Ubuntu)吗?在这种情况下,您可能需要将 rename 部分更改为 rename 's/\.jpg\.jpg$/.jpg/'
【解决方案2】:

也许你可以使用内置的rename 命令。

rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg

第一个参数是一个正则表达式,它将匹配.jpg.jpg结尾的文件名并替换为.jpg。 第二个参数将查找当前目录中具有.jpg.jpg 格式的文件。

有关更多信息,请阅读手册页。

【讨论】:

  • 是否仅限于当前文件夹?
  • 没有。您可以提供文件夹的路径来搜索文件。
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 2012-01-03
  • 2018-05-24
  • 1970-01-01
相关资源
最近更新 更多