UNIX shell脚本,用于读取文件、复制文件和删除文件
您好,我正在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
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无需假设,它始终删除原始文件。唯一的区别是它是进行简单的重命名还是复制,然后删除。谢谢你的回复,请参阅我的评论。啊,似乎有人删除了这里的评论。甚至你的第二条评论也被删除了。。。