![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
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. |
|
||||
|
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 |
|
||||
|
Zitat:
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 |
|
||||
|
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 |
|
||||
|
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
|
|
||||
|
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
|
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|