0

嗨,我正在 UNIX 中编写一个 shell 脚本,它读取一个目录并将文件复制到另一个目录,然后删除第一个目录中的文件

我已经尝试过了,但它不起作用:-

files"=/project/scripts/input/"

for f in $files; do
    [ mv /project/scripts/input/$f.txt /project/scripts/output/$f.xml

    rm /project/scripts/input/$f.txt ]
else

    echo "Nothing to process will try later"

    exit

fi
4

2 回答 2

0

由于脚本的结构被严重破坏,很难确定脚本的真正意图是什么。因此,通过一些猜测,我将给出一个带有一些提示的伪答案:

  • files"=/project/scripts/input/"- 我假设这一行的目的是将变量设置为目录files中的所有文件/project/scripts/input/。但这条线不会那样做。取而代之的是,因为该"=/project/scripts/input/"部分是用双引号引起来的,所以它按字面意思扩展,没有赋予=. 所以整行最终都是一个执行的尝试files=/project/scripts/input/,即执行input/在相对路径下找到的目录files=/project/scripts/$files根本不会设置变量。
  • 我想你已经知道了else,并且fi必须在某处进行某种if声明。如果您编辑它以包含实际陈述,您的问题将更有意义if(编辑答案本身,不要发表评论)
  • for ...; do语句后必须始终跟一个done语句以指示循环的结束
  • [并且]总是专门用于测试条件。请参阅http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html。正在测试的条件将在 范围内[]然后会发生一些条件动作,具体取决于条件的结果。
  • 正如我的评论中提到的,mv将自动删除源文件,因此不需要rm.

简而言之,您最好编辑您的问题以提供您所询问的完整脚本,以及您希望它做什么。

于 2013-11-02T21:29:42.480 回答
0

可能是这样的

cd $SourceDir && ( tar cfz - * | ( cd $TargetDir && tar xfz - ) )

(从头写/未测试...)

于 2013-11-01T17:37:18.990 回答