gpt4 book ai didi

bash - 重命名/移动 (mv) 以名称开头的多个文件

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

我正在尝试重命名与一个目录中的模式匹配的多个文件。

文件:

stack_overflow_one.xml
stack_overflow_two.xml
stack_overflow_one.html

我想将 stack_overflow 重命名为 heap_graph

heap_graph_one.xml
heap_graph_two.xml
heap_graph_one.html

我尝试了以下方法:

使用重命名:

rename stack_overflow heap_graph stack_overflow* # returns 'The syntax of the command is incorrect.'

在 Bash 中使用 for 循环

# how can I write this in one line? I've tried wrapping in one line, but also does not work
for i in stack_overflow* do
mv "$i" "${i/stack_overflow/heap_graph}"
done

但是,这些都不起作用。

最佳答案

您遇到的是 for 循环中的一个小语法错误。脚本的其余部分应该可以正常工作,没有任何问题。

for i in stack_overflow*; do
# ^^^ missing semi-colon
# The below condition to handle graceful loop termination when no files are found
[ -f "$i" ] || continue
mv "$i" "${i/stack_overflow/heap_graph}"
done

ghoti 所述下面如果你再次使用 bourne shell bash 而不是 POSIX bourne shell (sh) 上面的解决方案是可移植的,你可以使用特殊的 globbing 选项来避免当 glob 没有返回任何文件时必须处理的情况。

shopt -s nullglob
for i in stack_overflow*; do
mv "$i" "${i/stack_overflow/heap_graph}"
done

shopt -u nullglob

-s 选项设置它,-u 取消设置。更多关于 shopt 的信息来自 GNU bash page

关于bash - 重命名/移动 (mv) 以名称开头的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302196/

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