gpt4 book ai didi

bash - Bash 子字符串替换 ${foo/a/b} 的 Shell 通用等价物

转载 作者:行者123 更新时间:2023-11-29 09:42:58 25 4
gpt4 key购买 nike

是否存在与 shell 无关的 Bash 子字符串替换等价:

foo=Hello
echo ${foo/o/a} # will output "Hella"

大多数时候我可以使用 bash 所以这不是问题,但是当与 find -exec 结合使用时它不起作用。例如,要将所有 .cpp 文件重命名为 .c,我想使用:

# does not work
find . -name '*.cpp' -exec mv {} {/.cpp$/.c}

目前,我正在使用:

# does work, but longer
while read file; do
mv "$file" "${file/.cpp$/.c}";
done <<< $(find . -name '*.cpp')

理想情况下,可以在脚本中使用的解决方案更好!

最佳答案

使用 find-exec 你可以这样做:

find . -name '*.cpp' -exec bash -c 'f="$1"; mv "$f" "${f/.cpp/.c}"' - '{}' \;

然而,这将为每个文件名创建 bash -c,因此出于性能原因,使用 xargs 或这样的 for 循环更好:

while IFS= read -d '' -r file; do 
mv "$file" "${file/.cpp/.c}"
done < <(find . -name '*.cpp' -print0)

关于bash - Bash 子字符串替换 ${foo/a/b} 的 Shell 通用等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35342157/

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