我想创建一个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}
答案 0 :(得分:1)
一些提示:
#
启动shebang行,否则会出现语法错误。mkdir -p
始终尝试创建目录。这样你就不必检查它是否存在。-eq
而不是=
来比较数字。答案 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")