gpt4 book ai didi

bash - 修剪文件名以仅保留最后 5 个字符

转载 作者:行者123 更新时间:2023-12-05 08:35:43 25 4
gpt4 key购买 nike

想知道您是否可以提供帮助。我有成千上万个这样的文件名:

2016-IMG123
IMG124
2018-13727-IMG123

我正在尝试在终端中创建一个单行文件以重命名文件夹中的所有这些文件以仅保留最后 6 个字符。

 for f in *; do mv "$f" "${f%?????}"; done

这是我的出发点,但我发现使用 for 循环有点令人困惑。大多数示例代码讨论的是从前面删除 x 个字符,而不是通过从开头删除任何其他字符只留下 6 个字符。

最佳答案

因此,我们的想法是从一开始就删除一个字符串,您可以使用变量替换 ${var#string} 来完成。但是您想定义什么是 string,而 string 是 var 删除最后 5 个字符后剩下的所有内容。这是由 ${var%?????} 给出的。所以你可以使用${var#"${var%??????}"}。您的代码现在将显示为:

$ for f in *; do mv -- "$f" "${f#"${f%?????}"}"; done

请注意,如果您的初始文件名短于 5 个字符,则此方法和许多其他方法可能会失败。您可以通过以下方式保护自己:

for f in *; do 
g="${f#"${f%?????}"}"
[ "$g" ] && mv -- "$f" "$g"
done

注意:建议明确引用字符串 ${f%?????}。这是为了避免不必要的全局扩展。有关详细信息,请参阅此问题下方@LeaGris 的评论。

关于bash - 修剪文件名以仅保留最后 5 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73362579/

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