![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| rekursiva chmod att endast påverkar kataloger? | retrovertigo | UNIX för avancerade & Expertanvändare | 1 | 06-22-2007 05:02 |
| Recursive pid script | jbarnhar | Shell-programmering och Skript | 3 | 05-02-2007 04:14 |
| Problem med Recursive funktion | Malle | Shell-programmering och Skript | 4 | 02-03-2007 10:40 |
| abonnentförteckningar problem | yeah016 | UNIX for Dummies Frågor & Svar | 2 | 07-22-2006 08:48 |
| grep Rekursiva kataloger | jagannatha | UNIX for Dummies Frågor & Svar | 8 | 07-24-2003 05:00 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Script problemet beror på rekursiv kataloger Hjälp snälla
Hej allihopa, jag letar efter en bättre lösning än det land som jag har skapat för min uppgift
Uppgiften är: Skapa ett automatiserat skript som kontrollerar om Uppladdningar i en angiven katalog och flytta dem till ett annat angivet Katalogen om filerna är helt uppladdat. Filerna FTP'd till den angivna katalogen Flera FTPS kunde köra så att veta om en viss FTP är klar är svårt för mig att kolla efter Process ID Jag skapade skriptet nedan, men kan se att problem kan uppstå med Uploads of Trees till exempel Om uppladdningen katalogen har följande: Citat:
Därefter borde, inte det betyda att alla filer och kataloger sub under den mappen kommer att vara helt upp och även äldre än den ålder jag det jag söker? ...... Jag hoppas att vettigt .... Jag tror inte att så är fallet men .... Jag hoppas det finns ett bättre sätt att hantera denna fråga. Thanks for being there. Kod:
#!/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
|
|
||||
|
Hello ... Jag skulle angripa problemet i PERL, Men nu jag ville ta upp alternativ för att avgöra om filen uppladdningen är komplett ... Det vanliga sättet att göra detta är att låta personen eller programvara som gör det uppladdning till RENAME (ftp kommandot REN) till en annan katalog i samma filsystem. Eftersom en RENAME (likt en mv flyttar i tanken) bara förändringar pekare, är processen ögonblicklig och så om filen visas i den flyttade till katalogen, du vet att det måste vara komplett ....
så till exempel ... .. / uploaddir / commitdir Du ladda upp filer till uploaddir och när överföringen är klar utfärda ett kommando som ftp> REN uploadedfile commitdir / uploadedfile Processen polls commitdir, inte uploaddir. Om en fil visas i commitdir, vet du det måste vara helt upp och stängt. |
|
||||
|
Hello Quine, tack för svaret,
Problemet jag har är att jag vill ha ett cron-jobb kör det här skriptet och katalogen som filerna flyttas till syns inte heller nås av uploader. När filerna har laddats upp och flyttas, uppladdaren inte längre har tillgång till dem. (väl acceptera för den lilla tid mellan cron jobb ca. 1-5 minuter max) En perl lösning skulle vara godtagbart för mig, accepterar jag har kodats bara en modul i perl i mitt liv, du hörde nog av det ..... "Hello World" ![]() Skalskript Jag kan ta sig igenom som ni kan se av scriptet har jag skrivit så långt. Så några exempel även i perl skulle gynna mitt problem. tack igen |
![]() |
| Komihåglista |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|