The UNIX and Linux Forums  

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
skapa kataloger på samma fält vivek_damodaran HP-UX 3 11-14-2007 03:06
Tar och flyttar kataloger stocksj Sun Solaris 2 11-13-2007 11:33
flytta kataloger till nya kataloger på flera servrar mackdaddy07 Shell-programmering och Skript 0 04-06-2007 12:30
bash / awk scripting hjälp (skapa GAMLA nya användare) Jukai Shell-programmering och Skript 2 10-17-2006 06:36
skapa kataloger carlvernon UNIX for Dummies Frågor & Svar 3 06-01-2006 02:45

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 07-24-2008
Kiint Kiint is offline
Registered User
  
 

Join Date: Jul 2008
Inlägg: 6
Bash och awk för att skapa kataloger och flytta filer

Jag har ett säkerhetssystem som FTP kameran filer till min maskin, men jag vill sortera bilder (fattas varje 30s) i kataloger genom timme.

Varje bild använder följande filformat.
yymmddhhmmsstt.jpg (där tt är millisekunder)

Jag tänker att för slingan är bäst

för fil i *. jpg
göra
? här?
gjord

Jag vet det mycket vaga, men slutresultatet är jag gissa använda awk (eller bättre?) För att skapa variabler från yy mm dd hh delar av filnamnen, och sedan skapa kataloger baserat på de variabler nested med en kontroll för att se om katalog finns, skapa katalogen om det icke.

dvs (hur jag kan tänka mig att det fungerar, jag vet inte hur man faktiskt bygga scriptet för att göra detta)

för filen i 08072400123200.jpg
göra
% y \u003d 08
% m \u003d 07
% d \u003d 24
% h \u003d 00
om det inte finns katalogen% y - mkdir% y
om det inte finns katalogen% Y /% m - mkdir% Y /% m
om det inte finns katalogen% y /% m /% d - mkdir% y /% m /% d
om det inte finns katalogen% y /% m /% d /% h - mkdir% y /% m /% d /% h
mv% y% m% d% h *. jpg% Y /% m /% d /% h
gjord

Flytta alla bilder som tagits inom den timmen i respektive underkataloger.

Någon hjälp skulle vara mycket uppskattat.
  #2 (permalänk)  
Old 07-24-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Inlägg: 2558
använder bash, bör du börja läsa upp här. Den visar hur du får understrängar.
  #3 (permalänk)  
Old 07-24-2008
chihung chihung is offline
Registered User
  
 

Join Date: juni 2008
Ort: Singapore
Inlägg: 48
Vi har inte för att testa enskilda katalognivå "cos om botten katalogen finns den förälder bör existera. Även mkdir-p kommer att göra allt icke existerande förälder kataloger. Även jag presentera korta circurt "& & för att se katalogen finns innan jag flytta filen.

Vi kan också undvika alla upprepa kod med i utvinna yy / mm / dd / hh med hjälp av "som -" och sed. sed ändras 2 siffror med 2 siffror + mellanslag så att det kan sätta resultatet tillbaka till "som -" att ställa in positionella variabler i enlighet

Detta är mitt bidrag, det bör fungera (även om sh)

Kod:
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 (permalänk)  
Old 07-24-2008
Kiint Kiint is offline
Registered User
  
 

Join Date: Jul 2008
Inlägg: 6
Citat:
Ursprungligen postat av chihung View Post
Vi har inte för att testa enskilda katalognivå "cos om botten katalogen finns den förälder bör existera. Även mkdir-p kommer att göra allt icke existerande förälder kataloger. Även jag presentera korta circurt "& & för att se katalogen finns innan jag flytta filen.

Vi kan också undvika alla upprepa kod med i utvinna yy / mm / dd / hh med hjälp av "som -" och sed. sed ändras 2 siffror med 2 siffror + mellanslag så att det kan sätta resultatet tillbaka till "som -" att ställa in positionella variabler i enlighet

Detta är mitt bidrag, det bör fungera (även om sh)

Kod:
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
Ditt manus är helt perfekt, jag älskar det ... förutom ...

sista -> [! -d $ dir] & & mkdir-p $ dir & & mv $ i $ dir <- wouldnt faktiskt flytta filen Om katalogen redan fanns, så jag lagt till en extra rad under med bara -> mv $ i $ dir <-- - på plats och att lösa den delen, så det blir nu, men jag skulle tänka på det nu generera ett fel om den katalog som man vill skapa doesnt finns (men borde inte felet för efterföljande objekt - tror jag)


Kod:
#!/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 (permalänk)  
Old 07-24-2008
chihung chihung is offline
Registered User
  
 

Join Date: juni 2008
Ort: Singapore
Inlägg: 48
Jag försökte vara "smart" för många "kortslutning" gör mig kortslutning också.
Det bör se ut så här:


Kod:
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

Du kanske även vill se *. jpg vara din Patten av:

Kod:
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
...

Inte säker på om bash har ett mer elegant sätt att plocka upp dina filer i för slinga, men över [0-9] ... bör definitivt arbeta för sh.

När det gäller danmero bidrag, jag kunde inte få det att arbeta i Solaris bash

Kod:
$ 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

I Cygwin, även om den inte kasta undantag variabeln d motsvarar utvinna första 8 siffror. Vi har fortfarande behov av att vända det till sökvägen innan vi kan göra hierarkisk trädstruktur

Kod:
$ 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, har jag missat något
  #6 (permalänk)  
Old 07-24-2008
Kiint Kiint is offline
Registered User
  
 

Join Date: Jul 2008
Inlägg: 6
Vad jag har hittills, som jag kan tänka mig bör fungera (men icke) är (och isnt mycket elegant eller frisk)


Kod:
#!/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 (permalänk)  
Old 07-24-2008
Kiint Kiint is offline
Registered User
  
 

Join Date: Jul 2008
Inlägg: 6
Även ändring av olika skal dumhet doesnt hjälp

. / filter.sh: linje 17: syntaxfel nära oväntad token "fi"
. / filter.sh: rad 17: "fi"


Kod:
#!/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

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 09:38.


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