The UNIX and Linux Forums  

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Schaffung von Verzeichnissen auf dem gleichen Feld vivek_damodaran HP-UX 3 11-14-2007 03:06 PM
Teer-und abwandern Verzeichnisse stocksj SUN Solaris 2 11-13-2007 11:33 AM
bewegen, um neue Verzeichnisse Verzeichnisse auf mehreren Servern mackdaddy07 Shell Programmierung und Scripting 0 04-06-2007 12:30 PM
bash / awk-Scripting-Hilfe (OLD schaffen neue Benutzer) Jukai Shell Programmierung und Scripting 2 10-17-2006 06:36 AM
Verzeichnisse erstellen carlvernon UNIX for 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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Registrierte Nutzer
  
 

Join Date: Jul 2008
Beiträge: 6
Bash und Awk für die Erstellung von Verzeichnissen und Dateien

Ich habe ein System, dass die Kamera FTPs Dateien auf meinem Rechner, aber ich möchte die Bilder sortieren (jede 30) in die Verzeichnisse von Stunde.

Jedes Bild wird die folgende Datei-Format.
yymmddhhmmsstt.jpg (wo ist der TT in Millisekunden)

Ich denke die for-Schleife lässt sich am besten

für die Datei in *. jpg
tun
? hier?
getan

Ich weiß, seine sehr vage, aber das Endergebnis ist, bin ich raten Verwendung awk (oder besser?), Um Variablen aus der yy mm dd hh Teile der Dateinamen, dann schaffen Verzeichnisse auf der Grundlage dieser Variablen mit einem verschachtelten prüfen, ob die Verzeichnis existiert, die das Verzeichnis, wenn sie doesnt.

Das bedeutet (die Art, wie ich mir das funktioniert, Ich weiß nicht, wie eigentlich das Skript bauen, dies zu tun)

für die Datei in 08072400123200.jpg
tun
% Y \u003d 08
% m \u003d 07
% d \u003d 24
% h \u003d 00
wenn nicht vorhanden Verzeichnis% y - mkdir% y
wenn nicht vorhanden Verzeichnis% Y /% m - mkdir% Y /% m
wenn nicht vorhanden Verzeichnis% Y /% m /% d - mkdir% Y /% m /% d
wenn nicht vorhanden Verzeichnis% Y /% m /% d /% h - mkdir% Y /% m /% d /% h
mv% Y% m% d% h *. jpg% Y /% m /% d /% h
getan

Umzug alle Bilder innerhalb dieser Stunde in die jeweiligen Unterverzeichnisse.

Jede Hilfe wäre sehr geschätzt.
  #2 (permalink)  
Old 07-24-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 2558
bash verwenden, sollten Sie bis Lesung hier. Es zeigt Ihnen, wie Sie Teilzeichenketten.
  #3 (permalink)  
Old 07-24-2008
chihung chihung is offline
Registrierte Nutzer
  
 

Join Date: Jun 2008
Ort: Singapur
Beiträge: 48
Wir haben nicht für die Beurteilung der einzelnen Verzeichnis' cos, wenn der Boden-Verzeichnis vorhanden ist, werden die Eltern sollten vorhanden sein. Auch, mkdir-p werden alle nicht-vorhandenen übergeordneten Verzeichnissen. Auch ich "kurz circurt '& & Verzeichnis existieren, um zu gewährleisten, bevor ich die Datei.

Wir können auch nicht alle wiederholen Code mit in die Gewinnung jj / mm / dd / hh mit "gesetzt -" und sed. sed verändern wird 2-stellig mit 2 Ziffern + Raum, so dass sie das Ergebnis zurück zu "Set -", um die Positions-Variablen werden

Dies ist mein Beitrag, es sollte funktionieren (und sei es auch 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
Registrierte Nutzer
  
 

Join Date: Jul 2008
Beiträge: 6
Zitat:
Zitat von chihung View Post
Wir haben nicht für die Beurteilung der einzelnen Verzeichnis' cos, wenn der Boden-Verzeichnis vorhanden ist, werden die Eltern sollten vorhanden sein. Auch, mkdir-p werden alle nicht-vorhandenen übergeordneten Verzeichnissen. Auch ich "kurz circurt '& & Verzeichnis existieren, um zu gewährleisten, bevor ich die Datei.

Wir können auch nicht alle wiederholen Code mit in die Gewinnung jj / mm / dd / hh mit "gesetzt -" und sed. sed verändern wird 2-stellig mit 2 Ziffern + Raum, so dass sie das Ergebnis zurück zu "Set -", um die Positions-Variablen werden

Dies ist mein Beitrag, es sollte funktionieren (und sei es auch 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
Ihr Skript ist absolut perfekt, ich liebe es ... es sei denn ...

der letzten -> [! -d $ dir] & & mkdir-p $ dir & & mv $ i $ dir <- wouldnt tatsächlich die Datei, wenn das Verzeichnis bereits, so dass ich einen zusätzlichen Zeile darunter mit -> mv $ i $ dir <-- -, und dass die Lösung, dass ein Teil, so dass es nun, auch wenn Ich könnte mir vorstellen, das wird jetzt einen Fehler erzeugen, wenn das Verzeichnis, es schaffen will, doesnt gibt (aber shouldnt Fehler für die folgenden Dateien - ich denke)


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

Join Date: Jun 2008
Ort: Singapur
Beiträge: 48
Ich habe versucht zu "intelligenten", zu viele "Kurzschluss" machen mich Kurzschluss zu.
Es sollte so aussehen:


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

Sie können noch wollen, um sicherzustellen, *. jpg werden Ihre Patten durch:

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

Sie sind sich nicht sicher, ob bash hat einen eleganteren Weg, um Ihre Dateien in der for-Schleife, aber die oben [0-9] ... sollte für sh.

Was danmero Beitrag, konnte ich nicht bekommen, die 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, auch wenn sie nicht werfen Ausnahme, die Variable d entspricht auf die Gewinnung von den ersten 8 Ziffern. Wir müssen noch wiederum, dass in Verzeichnispfad vor können wir die hierarchische Baumstruktur

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, habe ich etwas vermissen
  #6 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Registrierte Nutzer
  
 

Join Date: Jul 2008
Beiträge: 6
Was ich so weit, dass ich vorstellen sollte (aber doesnt) ist (und sehr elegant oder isnt sane)


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

Join Date: Jul 2008
Beiträge: 6
Auch die Änderung für die verschiedenen Shell Dummheit doesnt Hilfe

. / filter.sh: Linie 17: Syntax-Fehler in der Nähe unerwartete Token "fi"
. / filter.sh: Linie 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

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 04:57 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0