gpt4 book ai didi

bash - 使用 bash 脚本将下划线替换为空格

转载 作者:行者123 更新时间:2023-12-05 08:24:16 27 4
gpt4 key购买 nike

如何使用 Bash 脚本将多个文件名中的所有下划线字符替换为空格?使用此代码,我们可以用破折号替换下划线。但它如何处理空格?

for i in *.mp3;
do x=$(echo $i | grep '_' | sed 's/_/\-/g');
if [ -n "$x" ];
then mv $i $x;
fi;
done;

谢谢!

最佳答案

应该这样做:

for i in *.mp3; do
[[ "$i" = *_* ]] && mv -nv -- "$i" "${i//_/ }"
done
  • 测试 [[ "$i"= *_* ]] 测试文件名是否包含任何下划线,如果包含,将 mv 文件,其中 "${i//_/}" 扩展为 i,其中所有下划线都已替换为空格(参见 shell parameter expansions )。
  • mv 的选项-n 表示no clobber:不会覆盖任何现有文件(非常安全)。 可选
  • mv 的选项-v 用于verbose:将说明它在做什么(如果您想查看发生了什么)。 非常可选
  • -- 在这里是为了告诉 mv 参数将从这里开始。这始终是一个很好的做法,就好像文件名以 - 开头一样,mv 将尝试将其解释为一个选项,而您的脚本将失败。 非常好的做法

另一条评论:使用 glob 时(即 for i in *.mp3),设置 shopt -s nullglobshopt 总是很好-s failglob。如果没有文件匹配该模式,前者将使 *.mp3 展开为空(因此不会执行循环),后者将明确引发错误。如果没有这些选项,如果不存在匹配 *.mp3 的文件,循环内的代码将使用具有逐字值 *.mp3i 执行> 这可能会导致问题。 (好吧,这里不会有任何问题,因为守卫 [[ "$i"= *_* ]],但始终使用任何一个选项都是一个好习惯)。

希望这对您有所帮助!

关于bash - 使用 bash 脚本将下划线替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958658/

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