我有一个脚本在XX:00每分钟运行一次.该脚本循环遍历给定目录中的所有子文件夹,并对内部文件执行操作;
folder=/path/to/directory #Starting directory
someerror=0 #Did we have an error?
#CD to directory. Does it even exist?
cd $folder
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success changing directory to $folder && mainfolderexist=1
[ $RETVAL -ne 0 ] && echo Failure changing directory to $folder && mainfolderexist=0
if [ $mainfolderexist -eq 1 ]; then
shopt -s nullglob
for dir in $folder/*/
do
thedirname=`basename $dir` #Get directory name
#cd to sub dir. Does it even exist?
cd $dir
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success changing directory to $dir && subfolderexist=1
[ $RETVAL -ne 0 ] && echo Failure changing directory to $dir && subfolderexist=0
if [ $subfolderexist -eq 1 ]; then
#perform some operation on all files in this directory
someApp -someArgs --name=$thedirname *
else #sub folder doesn't exist
someerror=1
break
fi
#next folder
done
else #main folder doesn't exist
someerror=1
fi
#REPEAT (only if no errors occured)
if [ $someerror -eq 0 ]; then
at Now + 1 minutes << END
/bin/bash "$0" "$@"
END
fi
我使用它的方式是使用SFTP将目录上传到服务器,到/ home / incoming这样的文件夹,一旦目录完全上传,我将把它移到/ path / to / directory.现在这是我担心的部分.
到目前为止,我一直在确保只在XX:XX:02和XX:XX:50之间移动目录,但这是否甚至是必要的?我想自动化上传移动过程而不考虑系统时间,所以我很想知道;
>如果目录正在XX:00中移动(mv“somedir”“/ path / to / directory / somedir”)并且脚本运行,循环遍历所有目录,该怎么办?
>如果系统在mv命令期间断电会怎么样?如果目录最终会被移动一半或类似的东西,我将不得不在执行上述脚本之前编写一个验证这个的脚本.
解决方法:
如果源路径和目标路径位于同一文件系统上,则mv是原子操作.由于它实际上不涉及复制或以其他方式重定位文件,因此您的目录永远不会以“半移动”状态结束.
另一方面,如果您的源路径和目标路径位于不同的文件系统上,那么mv实际上是一个副本,后面是整个树上的删除,这可能需要花费大量时间,如果被中断,将会留下一个半完成状态.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。