想知道你是否可以帮忙。我有数千个这样的文件名:
\n2016-IMG123\nIMG124\n2018-13727-IMG123\nRun Code Online (Sandbox Code Playgroud)\nI\xe2\x80\x99m 尝试在终端中创建一个衬垫来重命名文件夹中的所有这些文件,只保留最后 6 个字符。
\n for f in *; do mv "$f" "${f%?????}"; done\nRun Code Online (Sandbox Code Playgroud)\n这是我的出发点,但我发现使用 for 循环有点令人困惑。大多数示例代码都讨论从前面删除 x 个字符,而不是通过从开头删除任何附加字符来仅留下 6 个字符。
\n因此,我们的想法是从开头删除一个字符串,您可以使用变量替换来完成此操作${var#string}。但你想定义什么是字符串,字符串是删除最后 5 个字符后string剩下的所有内容。var这是由 给出的${var%?????}。所以你可以使用${var#"${var%?????}"}. 您的代码现在将显示为:
$ for f in *; do mv -- "$f" "${f#"${f%?????}"}"; done
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的初始文件名短于 5 个字符,则此方法和许多其他方法可能会失败。您可以通过以下方式保护自己免受这种影响:
for f in *; do
g="${f#"${f%?????}"}"
[ "$g" ] && mv -- "$f" "$g"
done
Run Code Online (Sandbox Code Playgroud)
注意:建议明确引用字符串${f%?????}。这是为了避免不必要的全局扩展。有关详细信息,请参阅此问题下方 @LeaGris 的评论。
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |