Results 1 to 1 of 1
Hello everyone , I am looking for a better solution then the one I have created for the my Task
The task is:
Create an automated script that will check ...
- 04-27-2008 #1Just Joined!
- Join Date
- Jan 2008
- Posts
- 4
Move Files based upon STAT last_changed script FTP Problems
Hello everyone , I am looking for a better solution then the one I have created for the my Task
The task is:
Create an automated script that will check for Uploads in a specified Directory and move them to another specified Directory if the files are completely uploaded.
Files are FTP'd to the Specified directory
Multiple FTPS could be running so knowing if a particular FTP is complete is difficult for me to check by Process ID
I created the script listed below , but can see that issues can arise with Uploads of Trees
for instance
If the Upload directory has the following:
I am not sure , but if the last changed date of the stat command on a directory is older then the Age I am looking for# ls -ltR UPLOAD_DIR/
UPLOAD_DIR/:
total 4
drwxr-xr-x 4 root root 4096 Apr 26 21:32 Directory1
-rw-r--r-- 1 root root 0 Apr 26 21:31 file1.txt
UPLOAD_DIR/Directory1:
total 8
drwxr-xr-x 2 root root 4096 Apr 26 21:33 SubDir2
drwxr-xr-x 2 root root 4096 Apr 26 21:32 SubDir1
-rw-r--r-- 1 root root 0 Apr 26 21:32 dir1file1.txt
UPLOAD_DIR/Directory1/SubDir2:
total 0
-rw-r--r-- 1 root root 0 Apr 26 21:33 subdir2file2.txt
-rw-r--r-- 1 root root 0 Apr 26 21:33 subdir2file1.txt
UPLOAD_DIR/Directory1/SubDir1:
total 0
-rw-r--r-- 1 root root 0 Apr 26 21:32 subdir1file2.txt
-rw-r--r-- 1 root root 0 Apr 26 21:32 subdir1file1.txt
then shouldn;t that mean
that any file and sub directories below that Directory will be completely uploaded and also older then the Age I am looking for ?
...... I hope that made sense....
I do not think that is the case though....
I am hoping there is a better way to deal with this issue.
Thanks for being there.
Code:#!/bin/bash # # # This script will be used to monitor uploads to a specified directory # and move them to another directory for downloading. # # Things to consider: # 1. Was the uploaded files uploaded in a sub directory. # 2. Are the files being uploaded complete. # 3. Move the files to the specified directory # with the proper permissions. # # #-------------------------------------------------------------------------------# # # Functions # #-------------------------------------------------------------------------------# calc_time() { AGE_LAST_CHANGED=`expr ${CURRTIME} - ${FILE_LAST_CHANGED}` if [ ${AGE_LAST_CHANGED} -lt ${ACCEPTED_AGE} ]; then OK_TO_MOVE=N else OK_TO_MOVE=Y fi } check_date() { FILE_LAST_CHANGED=`stat -t ${NEWFILE} |awk '{print $13}'` } #-------------------------------------------------------------------------------# # # Vairables will go here # #-------------------------------------------------------------------------------# UPUSER=up_user DOWNUSER=down_user # UPPATH=/home/Private/Uploads DOWNPATH=/home/Private/Downloads CURRTIME=`date +%s` ACCEPTED_AGE=300 # 5 minutes of no activity according to date modified for f in $( ls ${UPPATH} ); do if [ -d ${UPPATH}/${f} ]; then #--- Directory with Subfiles In it ---# DIR=${UPPATH}/${f} echo "${DIR} is a Directory" DIRDATE=`date +%Y_%m_%d_%H%M%S` NEWDIR=${DOWNPATH}/${f}_${DIRDATE} NEWFILE=${DIR} check_date calc_time # It appears that the directory has not been changed in the allowed timeframe (ACCEPTED_AGE) # it is ok to create a new directory in the DOWNPATH now. # set permissions of new directory to the download user mkdir ${NEWDIR} # This causes a problem by leaving the original Directory present in th UPLOADS directory. for f2 in $(ls ${UPPATH}/$f ); do NEWFILE=${DIR}/${f2} # Set becuase of check_date function check_date calc_time if [ ${OK_TO_MOVE} = "Y" ]; then mv ${NEWFILE} ${NEWDIR} echo "mv ${NEWFILE} ${NEWDIR} " else echo "File date is too new to move better wait" fi chown -R ${DOWNUSER}:${DOWNUSER} ${NEWDIR} done else #--- File is in Main Upload directory ---# if [ -f ${UPPATH}/$f ]; then NEWFILE=${UPPATH}/${f} echo "${NEWFILE} is a file" check_date calc_time if [ ${OK_TO_MOVE} = "Y" ]; then mv ${NEWFILE} ${DOWNPATH} echo "mv ${NEWFILE} ${DOWNPATH} " chown ${DOWNUSER}:${DOWNUSER} ${DOWNPATH}/* else echo "File date is too new to move better wait" echo "next pass of cronjob should move this file" fi fi fi done


Reply With Quote