Shell脚本按日期(即mm-dd-yy)格式将文件移动到文件夹中

时间:2014-02-07 20:32:33

标签: shell unix scripting

我想创建一个Shell脚本,用于将创建时间在7天之内的文件移动到具有相同创建日期名称(即mm-dd-yy)格式的文件夹中。

我的脚本也将采用3个输入(即路径,存档指示器和保留期)

如果存档指示符已设置为Y,则脚本将在目标目录中查找任何现有文件。如果文件的创建日期时间为“01-05-2014 04:25:00”,它将首先查找日期为“01-05-2014”的文件夹。如果存在这样的文件夹,它只会将文件传输到该文件夹​​。如果所述文件夹不存在,那么它将创建一个具有上述名称的文件夹,并将文件从目标文件夹移动到创建的子文件夹。

我尝试过写一个脚本,但是它给出了一个错误,我的代码在下面,请帮忙。

!/bin/ksh - *Removed IT*
RETURNCD=0
INUPUTDIRECTORY=${1}
ARCHIVEINDICATOR=${2}
RETENTIONPERIODDAYS=${3}
RETURNCD=$?

if [ ${RETURNCD} != "0" ] ; then
    echo "ERROR: ${RETURNCD} parameter 1 must specify the INUPUTDIRECTORY."
    echo "ERROR: ${RETURNCD} parameter 2 must specify the ARCHIVEINDICATOR."
    echo "ERROR: ${RETURNCD} parameter 3 must specify the RETENTIONPERIODDAYS."
    EXITCODE="1"
    #& goto :END_MAIN
fi
max=$RETENTIONPERIODDAYS
for ((i=1; i<=$max; ++i )) ;
do
TEST1=$(find $INUPUTDIRECTORY/* ! -name . -prune -type f -mtime -$i)
  if [ $? -eq 0 ]
  then
  TEST=$(echo $((5 * $i)))
  TEST2=$(TZ=CST+"$TEST" date +%m-%d-%Y)
  TZ=CST+"$TEST" date +%m-%d-%Y | xargs mkdir -p
  cp -rf $TEST1 $TEST2

  else
  echo No Files Present for : 'TZ=CST+$TEST date +%m-%d-%Y'
  fi

done

:END_MAIN
exit ${EXITCODE}

2 个答案:

答案 0 :(得分:1)

一些提示:

  • 您需要使用#启动shebang行,否则会出现语法错误。
  • 使用mkdir -p始终尝试创建目录。这样你就不必检查它是否存在。
  • 使用-eq而不是=来比较数字。
  • Use More Quotes™

答案 1 :(得分:0)

@ l0b0的评论加:

在执行任何命令之前测试$?的目的是什么?你可能想要:

if [[ $# -lt 3 ]]; then
    echo "ERROR: parameter 1 must specify the INUPUTDIRECTORY."
    echo "ERROR: parameter 2 must specify the ARCHIVEINDICATOR."
    echo "ERROR: parameter 3 must specify the RETENTIONPERIODDAYS."
    exit 1
fi

要捕获命令的输出,请使用$()

TEST1=$(find $INUPUTDIRECTORY/* ! -name . -prune -type f -mtime +"$i")