【问题标题】:Find with multiple rename查找多个重命名
【发布时间】:2018-03-03 12:11:24
【问题描述】:

我需要用多种模式重命名数百万个文件。 一些文件名有一些我想替换的字符。 为了不多次扫描所有文件,我想一次完成所有替换。

我尝试了这些脚本:

find . -type f -name '*\.jpg' -exec rename 's/%c3%a0/\xc3\xa0/g' {} \; -exec rename 's/%c3%a9/\xc3\xa9/g' {} \; -exec rename 's/%c3%aa/\xc3\xaa/g' {} \;

find . -type f -name '*\.jpg' -exec rename 's/%c3%a0/\xc3\xa0/g' | -exec rename 's/%c3%a9/\xc3\xa9/g' | -exec rename 's/%c3%aa/\xc3\xaa/g'

这些脚本只替换一个字符。

请帮忙

【问题讨论】:

  • 你能说得更具体点吗?你想如何重命名你的文件?你的输入是什么?预期输出?如果您能多描述一点,而不是指望我们破译您的命令,这将使我们的生活更轻松。

标签: linux bash file-rename


【解决方案1】:

我认为问题在于你的第一个 rename 重命名了文件,所以当你 exec 你的第二个 rename 在同一个文件上时,它已经消失了,因为它已经被第一个重命名了!

我认为你一次完成所有替换会更好,它还可以节省每个文件多次执行rename

find ... -exec rename 's/a/b/g; s/c/d/g; s/e/f/g' {} \;

【讨论】:

  • 当然像rename '/%(\x\x)/ chr(oct("0x$1"))/ge' 这样的东西只需要一次调用,但我不知道是否有rename 暴露了这么多的内部结构。然后可能重写为 Perl 单行代码。
  • @triplee 我相信你可以在那里编写任意大而复杂的脚本。
  • 有很多rename 实现,但如果您使用的支持这一点,对您有好处! (-:
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多