Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
Google Site



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Zoeken in deze Thread Rate Thread Display Modes
  #8 (permalink)  
Old 07-24-2008
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

Sponsored Links
  #9 (permalink)  
Old 07-24-2008
Geregistreerde gebruiker
 

Join Date: juli 2008
Posten: 6
Citaat:
Oorspronkelijk geplaatst door danmero View Post
Shorther:

Code:
for i in *.jpg;do d=${i:0:8};test -d $d || mkdir $d ;mv $i $d;done

Awesome single line versie, perfect, behalve het ontbreken van geneste directories.

In plaats van een enkele map 08072511 Ik heb ze graag geneste

> 08
-> 07
-> 25
---> 11
  #10 (permalink)  
Old 07-24-2008
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
  #11 (permalink)  
Old 07-24-2008
danmero danmero is offline Forum Advisor  
 

Join Date: november 2007
Locatie: H3X
Berichten: 1565
Ops, snelle lezing

Code:
for i in *.jpg;do d=.$(sed 's/\(..\)/\/\1/g' <<< ${i:0:8});test -d $d || mkdir -p $d ;mv $i $d;done

@ chihung

Code:
$ uname -a
Linux test 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686 GNU/Linux


Laatst gewijzigd door danmero; op 07.24.2008 11:22 PM..
  #12 (permalink)  
Old 07-24-2008
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Moderator
 

Join Datum: oktober 2003
Locatie: -31.96,115.84
Berichten: 1.431
Probeer ...
Code:
for i in *.jpg; do d=$(echo $i|cut -c-8|fold -2|paste -s -d /); mkdir -p $d; mv $i $d; done

Sponsored Links
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 Uit


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



Alle tijden zijn GMT -4. Het is nu 11:00.


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-2010. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0