![]() |
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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. |
|
||||
|
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 |
|
||||
|
Citazione:
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 |
|
||||
|
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 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 ... 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
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
|
|
||||
|
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
|
|
||||
|
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
|
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|