根据运行编号将文件移动到特定于日期的文件夹,并且应根据计数器确定

时间:2019-06-25 05:40:32

标签: unix

我想将TLR文件以及所有*.log*.ini移至在/app/hard/ec4rd/ec4rd_backup/mmddyyyy_[Run_Number]中称为日期的特定文件夹中。
 [Run_Number]应该基于计数器来确定。
如果是第一次运行,则应为1。
例如:如果/u01/app/ec4rd/ec4rd_backup/06202019_1已经存在,则应创建一个新目录/app/hard/ecm2fs/KADE_TLE_Backup/06202019_2,文件应移至该目录,依此类推。

有人可以帮助我如何使用unix shell脚本吗?

下面是我的代码

#!/usr/bin/ksh
date=`date +"%m%d%Y"`;
cd /app/hard/ec4rd/ec4rd_backup/;
if [ ! -d "$date"_1 ];
then
mkdir "$date"_1;
find /app/hard/ec4rd/ec4rd_backup/*.ini -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup/"$date"_1/;
find /app/hard/ec4rd/ec4rd_backup/*.log -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup/"$date"_1/;
find /app/hard/ec4rd/TLR -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup/"$date"_1/;
elif [ -d "$date"_1 ];
then
mkdir "$date"_2;

find /app/hard/ec4rd/ec4rd_backup/*.ini -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup//"$date"_2/;
find /app/hard/ec4rd/ec4rd_backup/*.log -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup//"$date"_2/;
find /app/hard/ec4rd/TLR -type f -mtime -1 | xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup/"$date"_2/;
fi

1 个答案:

答案 0 :(得分:0)

通过搜索不存在的目标目录,可以轻松地概括当前代码:

#!/usr/bin/ksh
date=`date +"%m%d%Y"`
cd /app/hard/ec4rd/ec4rd_backup
counter=1
while target="$date"_$counter; [ -d $target ]
do  ((++counter))
done
mkdir $target
find /app/hard/ec4rd/ec4rd_backup/*.ini -type f -mtime -1 |
 xargs -n1 -i mv  {} /app/hard/ec4rd/ec4rd_backup/$target
…