![]() |
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
||||
|
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 |
|
||||
|
Citaat:
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 |
|
||||
|
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 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 ... 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
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
|
|
||||
|
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
|
|
||||
|
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
|
![]() |
| Bladwijzers |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|