【问题标题】:Shell rename a lot of files recursively [duplicate]Shell递归地重命名很多文件[重复]
【发布时间】:2019-08-27 03:35:09
【问题描述】:

我想用 shell 脚本/命令重命名子目录中的很多文件,我尝试了不同的方法但没有成功。

这是我得到的文件:

root/FOLDER1/media-125150-payasage151.jpg
root/FOLDER1/media-125165-payasage125.jpg
root/FOLDER2/media-1266165-payasage110.jpg
root/FOLDER2/media-1266165-portrait151.jpg

我想用“paysage”替换每个“payasage”

root/FOLDER1/media-125150-paysage151.jpg
root/FOLDER1/media-125165-paysage125.jpg
root/FOLDER2/media-1266165-paysage110.jpg
root/FOLDER2/media-1266165-portrait151.jpg

我已经尝试使用重命名命令甚至使用 mv 方法的 RegExr... 谢谢!

【问题讨论】:

标签: linux bash shell file rename


【解决方案1】:

尝试一些类似的东西

for OLD in root/*/media-*-payasage*.jpg; do
  NEW=$(echo "$OLD" | sed 's/payasage/paysage/g')
  test "$OLD" != "$NEW" && mv "$OLD" "$NEW"
done

【讨论】:

  • 不必要的 sed 使用。使用NEW="${OLD//payasage/paysage}"Bash String Manipulation
  • 确实没有必要 - 但在此设置中,可读性胜过效率:重命名本身将占用比 sed 更多数量级的资源
  • 在 Windows 上:time for ((i = 0; i < 100; ++i)); do OLD="haha"; echo "$OLD" | sed "s/ha/hu/g" > /dev/null; done:3.9s 而time for ((i = 0; i < 100; ++i)); do OLD="haha"; echo "${OLD//ha/hu}" > /dev/null; done:0.006s
  • 在 Windows 上这可能是真的。问题被标记为 linux 虽然
  • 我希望你能把它复制粘贴到你的 linux 环境中 :) 这样我们就可以比较了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2011-10-18
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多