The UNIX and Linux Forums  

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com


Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
creëren directories op hetzelfde vak vivek_damodaran HP-UX 3 11-14-2007 03:06 PM
Teer en bewegende mappen stocksj SUN Solaris 2 11-13-2007 11:33
verplaatsen van mappen op nieuwe directories op meerdere servers mackdaddy07 Programmeren en Shell Scripting 0 04-06-2007 12:30
bash / awk scripting helpen scheppen (oude nieuwe gebruikers) Jukai Programmeren en Shell Scripting 2 10-17-2006 06:36
het creëren van directories carlvernon UNIX voor Dummies Questions & Answers 3 06-01-2006 02:45 PM

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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Geregistreerde gebruiker
  
 

Join Date: juli 2008
Posten: 6
Bash en awk voor het maken van mappen en bestanden verplaatsen

Ik heb een beveiligingssysteem dat FTPS de camera bestanden naar mijn computer, maar ik wil voor het sorteren van de foto's (genomen elke 30s) in mappen per uur.

Iedere foto maakt gebruik van het volgende bestand formaat.
yymmddhhmmsstt.jpg (waar tt is het milliseconden)

Ik denk de for-lus is het beste

voor bestand in *. jpg
doen
? hier?
gedaan

Ik weet zijn erg vaag, maar het eindresultaat is I am guessing awk gebruik (of beter?) Het creëren van variabelen uit de jj mm dd uu delen van de bestandsnamen, dan het maken van mappen op basis van die variabelen geneste met een controle om te zien of de directory bestaat, het creëren van de map als het doesnt.

dwz (de manier waarop ik stel het je voor werkt, I dont know how to daadwerkelijk bouwen van het script om dit te doen)

voor het bestand in 08072400123200.jpg
doen
% y \u003d 08
% m \u003d 07
% d \u003d 24
% h \u003d 00
indien deze niet bestaan map% y - mkdir% y
indien deze niet bestaan map% y /% m - mkdir% y /% m
indien deze niet bestaan map% y /% m /% d - mkdir% y /% m /% d
indien deze niet bestaan map% y /% m /% d /% h - mkdir% y /% m /% d /% h
mv% Y% m% d% h *. jpg% y /% m /% d /% h
gedaan

Verhuizen alle foto's die binnen dat uur in de respectieve subdirectories.

Alle hulp wordt zeer gewaardeerd.
  #2 (permalink)  
Old 07-24-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Geregistreerde gebruiker
  
 

Join Date: Sep 2006
Berichten: 2.538
met behulp van bash, moet u beginnen met het lezen van hier. Het toont je hoe je substrings.
  #3 (permalink)  
Old 07-24-2008
chihung chihung is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2008
Locatie: Singapore
Posts: 48
Wij hebben niet om te testen voor individuele mapniveau 'cos als de onderste map bestaat, de bovenliggende niveau zou moeten bestaan. Ook mkdir-p zullen alle niet-bestaande bovenliggende mappen. Ook ik "korte circurt '& & ervoor te zorgen directory bestaan voordat ik het bestand.

We kunnen ook voorkomen dat de herhaling van code met behulp van in de winning van yy / mm / dd / hh met behulp van 'set - "en sed. sed zal veranderen 2 cijfers met 2 cijfers + ruimte, zodat het kan het resultaat terug naar de 'set - "om de positionele variabelen dienovereenkomstig

Dit is mijn bijdrage, het zou moeten werken (zelfs op sh)
Code:
for i in *.jpg
do
   # yy is $1, mm is $2, dd is $3, hh is $4
   set -- `echo $i | sed -e 's/\([0-9][0-9]\)/\1 /g'`
   dir="$1/$2/$3/$4"
   [ ! -d $dir ] && mkdir -p $dir && mv $i $dir
done
  #4 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Geregistreerde gebruiker
  
 

Join Date: juli 2008
Posten: 6
Citaat:
Oorspronkelijk geplaatst door chihung View Post
Wij hebben niet om te testen voor individuele mapniveau 'cos als de onderste map bestaat, de bovenliggende niveau zou moeten bestaan. Ook mkdir-p zullen alle niet-bestaande bovenliggende mappen. Ook ik "korte circurt '& & ervoor te zorgen directory bestaan voordat ik het bestand.

We kunnen ook voorkomen dat de herhaling van code met behulp van in de winning van yy / mm / dd / hh met behulp van 'set - "en sed. sed zal veranderen 2 cijfers met 2 cijfers + ruimte, zodat het kan het resultaat terug naar de 'set - "om de positionele variabelen dienovereenkomstig

Dit is mijn bijdrage, het zou moeten werken (zelfs op sh)
Code:
for i in *.jpg
do
   # yy is $1, mm is $2, dd is $3, hh is $4
   set -- `echo $i | sed -e 's/\([0-9][0-9]\)/\1 /g'`
   dir="$1/$2/$3/$4"
   [ ! -d $dir ] && mkdir -p $dir && mv $i $dir
done
Je script is absoluut perfect, I love it ... behalve ...

de laatste -> [! -d $ dir] & & mkdir-p $ dir & & mv $ i $ dir <- wouldnt daadwerkelijk verplaatsen van het bestand of de map bestaat al, dus ik nog een extra regel onder met slechts -> mv $ i $ dir <-- - in de plaats, en dat dat een deel opgelost, zodat het nu, hoewel ik zou denken dit zal nu een foutmelding als de directory wil creëren doesnt bestaan (maar shouldnt fout voor de volgende bestanden - denk ik)

Code:
#!/bin/bash -x

for i in *.jpg
do
   # yy is $1, mm is $2, dd is $3, hh is $4
   set -- `echo $i | sed -e 's/\([0-9][0-9]\)/\1 /g'`
   dir="$1/$2/$3/$4"
   [ ! -d $dir ] && mkdir -p $dir && mv $i $dir
   mv $i $dir
done
  #5 (permalink)  
Old 07-24-2008
chihung chihung is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2008
Locatie: Singapore
Posts: 48
Ik probeerde te 'slim', te veel 'kortsluiting' make me kortsluiting ook.
moet er zo uitzien:

Code:
for i in *.jpg
do
   # yy is $1, mm is $2, dd is $3, hh is $4
   set -- `echo $i | sed -e 's/\([0-9][0-9]\)/\1 /g'`
   dir="$1/$2/$3/$4"
   [ ! -d $dir ] && mkdir -p $dir
   mv $i $dir
done
U kan het zelfs willen ervoor zorgen *. jpg worden uw Patten door:
Code:
for i in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].jpg
do
...
Niet zeker weet of bash heeft een elegante manier om te pick-up van uw bestanden in de lus, maar de hierboven [0-9] ... zou het zeker moeten werken voor sh.

Wat danmero bijdrage, ik kon het niet laten werken in Solaris bash
Code:
$ i=090807060504.jpg
$ d=${i:0:8}
bad substitution
$ echo $SHELL
/bin/bash
$ uname -a
SunOS chihung 5.10 Generic_118833-36 sun4u sparc SUNW,UltraSPARC-IIi-cEngine
In cygwin, hoewel het niet gooien uitzondering, de variabele d is gelijk aan de extractie van de eerste 8 cijfers. We moeten nog steeds hun beurt dat in de directory-pad, voordat we kunnen maken van de hiërarchische structuur
Code:
$ i=090807060504.jpg
$ d=${i:0:8}
$ echo $d
09080706
$ uname -a
CYGWIN_NT-5.1 chihung 1.5.25(0.156/4/2) 2007-12-14 19:21 i686 Cygwin
Danmero, heb ik mis iets
  #6 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Geregistreerde gebruiker
  
 

Join Date: juli 2008
Posten: 6
Wat heb ik tot nu toe, dat ik me zou moeten werken (maar doesnt) wordt (en isnt very elegant of geestelijk gezond)

Code:
#!/bin/bash

for file in *.jpg; do

set yy = `echo $file | awk '{split($0,a,""); print a[1]a[2]}'`
set mm = `echo $file | awk '{split($0,a,""); print a[3]a[4]}'`
set dd = `echo $file | awk '{split($0,a,""); print a[5]a[6]}'`
set hh = `echo $file | awk '{split($0,a,""); print a[7]a[8]}'`

if [ -d $yy ]; then
        if [ -d $yy/$mm ]; then
                if [ -d $yy/$mm/$dd ]; then
                        if [ -d $yy/$mm/$dd/$hh ]; then
                                mv $yy$mm$dd$hh*.jpg $yy/$mm/$dd/$hh/$file
                        elif
                                mkdir $yy/$mm/$dd/$hh
                                exit 1
                        fi
                elif
                        mkdir $yy/$mm/$dd
                        exit 1
                fi
        elif
                mkdir $yy/$mm
                exit 1
        fi
elif
        mkdir $yy
        exit 1
fi

done
  #7 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Geregistreerde gebruiker
  
 

Join Date: juli 2008
Posten: 6
Zelfs voor het bewerken van verschillende schaal domheid doesnt helpen

. / filter.sh: lijn 17: syntax error buurt onverwachte token "fi"
. / filter.sh: lijn 17: "fi"

Code:
#!/bin/bash -x

for file in *.jpg; do

YY = "echo $file | awk '{split($0,a,""); print a[1]a[2]}'"
MM = "echo $file | awk '{split($0,a,""); print a[3]a[4]}'"
DD = "echo $file | awk '{split($0,a,""); print a[5]a[6]}'"
HH = "echo $file | awk '{split($0,a,""); print a[7]a[8]}'"

if [ -d $YY ]; then
        if [ -d $YY/$MM ]; then
                if [ -d $YY/$MM/$DD ]; then
                        if [ -d $YY/$MM/$DD/$HH ]; then
                                mv $YY$MM$DD$HH*.jpg $YY/$MM/$DD/$HH/$file
                        elif
                                mkdir $YY/$MM/$DD/$HH
                        fi
                elif
                        mkdir $YY/$MM/$DD
                fi
        elif
                mkdir $YY/$MM
        fi
elif
        mkdir $YY
fi

done
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 02:53 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De UNIX-en Linux Forums Copyright © 1993-2009. Alle rechten voorbehouden.

Content Relevante URL's door vBSEO 3.2.0