UNIX shell脚本,用于读取文件、复制文件和删除文件

UNIX shell脚本,用于读取文件、复制文件和删除文件,shell,unix,Shell,Unix,您好,我正在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 ech

您好,我正在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

可能是这样的

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

(由head编写/未经测试…

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

  • files”=/project/scripts/input/“
    -我假设此行的目的是将变量
    files
    设置为
    /project/scripts/input/
    目录中的所有文件。但这条线不行。相反,因为
    “=/project/scripts/input/”
    部分用双引号括起来,所以它被逐字展开,没有赋予
    =
    特殊含义(变量赋值)。因此,整行代码都试图执行
    files=/project/scripts/input/
    ,即执行相对路径
    files=/project/scripts/
    下的目录
    input/
    。将根本不设置变量
    $files
  • 我想你已经知道,
    else
    fi
    必须用某种
    if
    语句进行。如果您将问题编辑为包含实际的
    if
    语句,那么您的问题将更有意义(编辑答案本身,不要添加注释)
  • 用于。。。;do
    语句后面必须始终跟一个
    done
    语句,以指示循环的结束
  • [
    ]
    总是专门用来测试条件句。看见正在测试的条件将在
    [
    ]
    范围内,然后将发生一些条件操作,具体取决于条件操作的结果
  • 正如我在评论中提到的,
    mv
    将自动删除源文件,因此不需要
    rm

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

没有
if
,你不能使用
else
fi
。作业中的
=
在引号之前。我不确定这里是否需要脚本-不像
cp
mv
应在将源文件复制到目标后自动删除源文件。使用
rename
命令:
rename's/\.txt/\.xml/'$files/*.txt
@chepner无需假设,它始终删除原始文件。唯一的区别是它是进行简单的重命名还是复制,然后删除。谢谢你的回复,请参阅我的评论。啊,似乎有人删除了这里的评论。甚至你的第二条评论也被删除了。。。