The UNIX and Linux Forums  
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.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-27-2008
robertmcol robertmcol is offline
Registered User
  
 

Join Date: februari 2008
Inlägg: 6
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:
# Ls-ltr UPLOAD_DIR /
UPLOAD_DIR /:
Totalt 4
drwxr-xr-x 4 root root 4096 26 april 21:32 Directory1
-rw-r - r - 1 root root 0 26 april 21:31 file1.txt

UPLOAD_DIR/Directory1:
Totalt 8
drwxr-xr-x 2 root root 4096 26 april 21:33 SubDir2
drwxr-xr-x 2 root root 4096 26 april 21:32 SubDir1
-rw-r - r - 1 root root 0 26 april 21:32 dir1file1.txt

UPLOAD_DIR/Directory1/SubDir2:
Totalt 0
-rw-r - r - 1 root root 0 26 april 21:33 subdir2file2.txt
-rw-r - r - 1 root root 0 26 april 21:33 subdir2file1.txt

UPLOAD_DIR/Directory1/SubDir1:
Totalt 0
-rw-r - r - 1 root root 0 26 april 21:32 subdir1file2.txt
-rw-r - r - 1 root root 0 26 april 21:32 subdir1file1.txt
Jag är inte säker, men om den sista Ändrat datum för stat kommando på en katalog som är äldre än den ålder jag det jag söker
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
  #2 (permalänk)  
Old 04-27-2008
quine quine is offline
Registered User
  
 

Join Date: mars 2008
Location: Bay Area Kalifornien
Inlägg: 68
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.
  #3 (permalänk)  
Old 04-27-2008
RobertCo RobertCo is offline
Registered User
  
 

Join Date: Aug 2006
Inlägg: 1
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
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 07:08.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0