The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
la creazione di directory sulla stessa casella vivek_damodaran HP-UX 3 11-14-2007 03:06 PM
Di catrame e le directory in movimento stocksj SUN Solaris 2 11-13-2007 11:33 AM
movimento ai nuovi elenchi delle directory su più server mackdaddy07 Shell scripting e di programmazione 0 04-06-2007 12:30 PM
bash / script awk aiuto (OLD creare nuovi utenti) Jukai Shell scripting e di programmazione 2 10-17-2006 06:36 AM
la creazione di directory carlvernon UNIX for Dummies Domande & Risposte 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Utente Registrato
  
 

Iscriviti Data: luglio 2008
Interventi: 6
Bash e Awk per la creazione di directory e spostamento di file

Ho un sistema di sicurezza che la fotocamera FTPS file alla mia macchina, però voglio ordinare le foto (prese ogni 30 anni) nella directory da ora.

Ogni immagine utilizza i seguenti formati di file.
yymmddhhmmsstt.jpg (dove tt è la millisecondi)

Penso per ciclo è meglio

per il file in *. jpg
fare
? qui?
fatto

So molto vago, ma il risultato finale è sto indovinando l'uso di awk (o meglio?) Per creare le variabili dal aa mm gg hh parti del nome del file, quindi la creazione di elenchi basati su queste variabili nidificate con un controllo per vedere se il directory esiste, creare la directory se doesnt.

vale a dire (il mio modo di immaginare di lavoro, I dont know how per costruire effettivamente lo script per fare questo)

per il file in 08072400123200.jpg
fare
y \u003d 08%
m \u003d 07%
d \u003d 24%
h \u003d 00%
se non esiste la directory% y - mkdir% y
se non esiste la directory% y /% m - mkdir% y /% m
se non esiste la directory% y /% m /% d - mkdir% y /% m /% d
se non esiste la directory% y /% m /% d /% h - mkdir% y /% m /% d /% h
mv% Y% m% d% h *. jpg% y /% m /% d /% h
fatto

Spostamento di tutte le foto scattate all'interno di tale ora nelle rispettive sottodirectory.

Qualsiasi aiuto sarebbe molto apprezzato.
  #2 (permalink)  
Old 07-24-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Utente Registrato
  
 

Join Date: Sep 2006
Messaggi: 2.540
usando bash, si dovrebbe cominciare a leggere fino qui. Essa mostra come ottenere sottostringhe.
  #3 (permalink)  
Old 07-24-2008
chihung chihung is offline
Utente Registrato
  
 

Iscriviti Data: giugno 2008
Ubicazione: Singapore
Interventi: 48
Non abbiamo prove per i singoli a livello di directory 'cos se la directory di fondo esiste, il genitore dovrebbe esistere. Inoltre, mkdir-p farà tutto il non-esistente directory genitore. Inoltre, ho introdurre 'breve circurt' & & directory esistenti per garantire, prima di spostare il file.

Siamo inoltre in grado di evitare di ripetere tutte le codice utilizzando in estrazione aa / mm / gg / hh utilizzando 'insieme -' e sed. sed cambierà 2 cifre con 2 cifre + spazio in modo che si può mettere il risultato torna a "set -" per impostare il posizionamento di conseguenza le variabili

Questo è il mio contributo, dovrebbe funzionare (anche su sh)
Codice:
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
Utente Registrato
  
 

Iscriviti Data: luglio 2008
Interventi: 6
Citazione:
Originalmente inviato da chihung View Post
Non abbiamo prove per i singoli a livello di directory 'cos se la directory di fondo esiste, il genitore dovrebbe esistere. Inoltre, mkdir-p farà tutto il non-esistente directory genitore. Inoltre, ho introdurre 'breve circurt' & & directory esistenti per garantire, prima di spostare il file.

Siamo inoltre in grado di evitare di ripetere tutte le codice utilizzando in estrazione aa / mm / gg / hh utilizzando 'insieme -' e sed. sed cambierà 2 cifre con 2 cifre + spazio in modo che si può mettere il risultato torna a "set -" per impostare il posizionamento di conseguenza le variabili

Questo è il mio contributo, dovrebbe funzionare (anche su sh)
Codice:
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
Il tuo script è assolutamente perfetto, I love it ... tranne ...

l'ultimo -> [! -d $ dir] & & mkdir-p $ dir & & mv $ i $ dir <- wouldnt effettivamente spostare il file se la directory esiste già, così ho aggiunto un ulteriore linea con appena al di sotto -> mv $ i $ dir <-- - nel luogo e che la parte risolti, in modo che diventa ora, anche se mi immagino questa ora generare un errore se la directory che vuole creare doesnt esistono (ma shouldnt di errore per le successive file - credo)

Codice:
#!/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
Utente Registrato
  
 

Iscriviti Data: giugno 2008
Ubicazione: Singapore
Interventi: 48
Stavo cercando di essere 'intelligenti', troppi 'corto circuito' make me troppo corto circuito.
esso dovrebbe essere simile al seguente:

Codice:
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
Si potrebbe anche voler garantire *. jpg per essere il vostro Patten da:
Codice:
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
...
Non sono sicuro se bash ha un modo più elegante di far salire i vostri file nel ciclo for, ma di cui sopra [0-9] ... dovrebbe lavorare per sh.

Per quanto riguarda danmero contributo, non ho potuto farlo funzionare in Solaris bash
Codice:
$ 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, anche se non passi eccezione, la variabile d è equivalente ad estrarre il primo di 8 cifre. Abbiamo ancora bisogno di trasformare in percorso di directory che prima di noi può fare la struttura ad albero gerarchica
Codice:
$ 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, mi ha fatto mancare nulla
  #6 (permalink)  
Old 07-24-2008
Kiint Kiint is offline
Utente Registrato
  
 

Iscriviti Data: luglio 2008
Interventi: 6
Quello che ho finora, che immagino dovrebbe lavorare (ma doesnt) è (e molto elegante isnt o sano)

Codice:
#!/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
Utente Registrato
  
 

Iscriviti Data: luglio 2008
Interventi: 6
Anche per modificare varie shell stupidità doesnt aiutare

. / filter.sh: linea 17: errore di sintassi in prossimità imprevisto token `fi '
. / filter.sh: linea 17: `fi '

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

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 10:04 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0