使用循环和mv更改文件类型

时间:2013-07-16 17:53:11

标签: unix loops rename ksh mv

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

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

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

对于.FDC类型的所有文件,我认为应该对它们应用mv函数,导致文件重命名为* .FDCTMP1。

当我尝试运行它时,命令行中的$变为>,我无法做任何事情。我过去遇到过这个问题而且我真的不知道发生了什么。每次发生这种情况我都要关闭我的putty实例并开始一个新实例。

下一步是将我的脚本应用于新重命名的.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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,也可以在分号后(或在后台放置命令的&之后)键入{{1}}。