Shell 将文件从一个目录中的文件夹复制到公用文件夹

Shell 将文件从一个目录中的文件夹复制到公用文件夹,shell,unix,sh,ksh,Shell,Unix,Sh,Ksh,我正在编写一个脚本,将文件从一个目录下的文件夹复制到一个公共位置。为此,我需要遍历目录中的文件夹。文件夹是按日期排列的,因此我使用的是小于和大于。但我无法进入循环。你能告诉我我的密码有什么问题吗 #!/usr/bin/ksh SCRIPT_DIRECTORY='/abc/script' DATA_DIRECTORY='/a/inbox' TARGET_DIRECTORY='/abc/final' START_DATE=$2 END_DATE=$3 if [ $1 == 'a' ] then

我正在编写一个脚本,将文件从一个目录下的文件夹复制到一个公共位置。为此,我需要遍历目录中的文件夹。文件夹是按日期排列的,因此我使用的是小于和大于。但我无法进入循环。你能告诉我我的密码有什么问题吗

#!/usr/bin/ksh

SCRIPT_DIRECTORY='/abc/script'
DATA_DIRECTORY='/a/inbox'
TARGET_DIRECTORY='/abc/final'
START_DATE=$2
END_DATE=$3

if [ $1 == 'a' ]
then
   while [[ $2 -gt 20151201 ]] && [[ $3 -lt 20151231 ]]
   do
     for file in `ls $DATA_DIRECTORY`
     do
        cp name* $TARGET_DIRECTORY
     done
  done
fi
此处a/inbox目录下的文件夹按日期从20151201到20151231设置。因此,我需要将从name开始的所有文件提取到一个公共目标目录
我还试图将其作为一个脚本,如果我传递像a、b、c这样的参数,它将进入相应的数据目录并从那里获取文件,而您的
语句是错误的。这样写:

while (($2 > 20151201 && $3 < 20151231))
while($2>20151201和$3<20151231))
另外,请验证$1、$2和$3是否确实包含您期望的值。

试试这个(我已经尝试过了,而且效果很好)

if[$1=='a']
然后
#使用您提到的ls$DATA_目录;我不能把它带到这里来
对于
ls$DATA\u目录中的文件

做
如果[$file-ge 20151201-a$file-le 20151231];然后
cp$DATA\u目录/$file/*$TARGET\u目录
fi
完成
fi


迭代只需要一个循环,并且已将日期检查(如果条件)移动到循环中。我使用了
-ge
而不是
-gt
,因为它看起来像某种monthy数据。也许你能适应你的需要。希望有帮助。

这会导致语法错误第13行:(:>20151201&&<20151231:语法错误:预期的操作数(错误标记为“>20151201&&<20151231”)您忘记键入参数,或者参数为空。您可以使用
while(${2:?two}>20151201&&${3:}<20151231))验证它
。知道如何增加循环中的日期吗?日期格式应该是YYYYMMDD。我不清楚这个问题。我可以知道用例吗?我有一个格式为20151201的日期,如何将日期增加到20151202“count=
expr$count+1
”其中count是一个变量。将正斜杠放在
expr
之前和
1
之后。前面的解决方案对您有效吗?