gpt4 book ai didi

regex - 是否有使用正则表达式更改文件名的 grep 或 shell 脚本?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:19 25 4
gpt4 key购买 nike

如何递归地将 xxx-xxx_[a-zA-Z]+_\d+_(\d+)\.jpg 更改为 $1.jpg

最佳答案

#!/bin/bash

find . | while read OLD; do
NEW="`sed -E 's/(.*\/)?xxx-xxx_[a-zA-Z]+_[0-9]+_([0-9]+)\.jpg/\1\2.jpg/' <<< "$OLD"`"
[ "$OLD" != "$NEW" ] && mv "$OLD" "$NEW"
done

一些注意事项:

  • 管道输出 findwhile read loop 是一种读取 find 输出的巧妙方法一次一行。这很好,因为它将文件处理为 find找到它们而不必先建立整个文件列表,如果你这样做就会发生 `find`在反引号中。

  • 如果您有大量不相关的文件,那么您可以添加 -regex find 的选项根据 soulmerge 的回答,但如果不是,嗯,没必要。

  • 我修改了您的正则表达式以允许在前面使用目录名称。他们将在 \1 中被捕获你要找的号码是\2 .

  • sed <<< "$OLD"echo "$OLD" | sed 相同, 只是有点花哨...

  • [ "$OLD" != "$NEW" ] && mvif [ "$OLD" != "$NEW" ]; then mv; fi 相同, 只是有点花哨...

编辑:已更改 \d[0-9]为了兼容性。我在我的 Mac 上测试过它,它可以工作。这是我设置的测试目录中发生的事情:

mv ./1/xxx-xxx_ERR_19_02.jpg ./1/02.jpg
mv ./2/xxx-xxx_BLAH_266_14.jpg ./2/14.jpg
mv ./xxx-xxx_ERR_19_01.jpg ./01.jpg

关于regex - 是否有使用正则表达式更改文件名的 grep 或 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com