1

我正在尝试获取某个扩展名的所有文件,重命名它们,对它们应用脚本,然后再次重命名它们。我遇到了一些奇怪的事情。

对于此步骤的第一步,我正在尝试应用以下命令

for f in *.FDC; do mv $f ${f%FDC}FDCTMP1 done

我相信,对于所有 .FDC 类型的文件,应该对它们应用 mv 函数,从而将文件重命名为 *.FDCTMP1。

当我尝试运行它时,命令行中的 $ 变为 >,我无法执行任何操作。我过去遇到过这个问题,我真的不知道发生了什么。每次发生这种情况时,我都必须关闭我的腻子实例并启动一个新实例。

下一步是将我的脚本应用到新重命名的 .FDCTMP1 文件。我不太确定我做对了,但这是我正在尝试的:

for f in *.FDCTMP1; do more $f | a bunch of sed and awk stuff here

我最初是用更多文件名测试这个脚本 | sed 和 awk 的东西,我不确定如何更改该功能以获取循环中的每个文件名。

然后,我想应用与步骤 1 相同的想法,再次重命名文件类型:

for f in *.FDCTMP1; do mv $f ${f%FDCTMP1}FDCTMP2 done

我想我提供了太多关于我的问题的信息,我认为主要问题是这部分:

for f in *.FDC;

如果它是相关的,我在 kornshell

4

2 回答 2

2

提示从 $PS1 更改为 $PS2 因为该for命令尚未看到done- 您在 mv 命令后缺少一个分号:

for f in *.FDC; do mv $f ${f%FDC}FDCTMP1 done
#---------------------------------------^

听起来你不需要3个循环

for f in *.FDC; do
    tmp1=${f}TMP1
    mv "$f" "$tmp1"
    # do stuff with "$tmp1"
    mv "$tmp1" "${f}TMP2"
done
于 2013-07-16T18:37:21.090 回答
1

在此命令行中:

for f in *.FDC; do mv $f ${f%FDC}FDCTMP1 done

您之前缺少分号done

for f in *.FDC; do mv $f ${f%FDC}FDCTMP1; done

实际上,您已经编写了将三个参数传递给的代码mv,而 shell 仍在寻找done命令的第一个单词。您可以单独done在一行上键入,也可以在分号之后(或在将&命令置于后台的之后)键入。

于 2013-07-16T18:37:00.227 回答