» »

[bash] Sortiranje fotografij po datumu

[bash] Sortiranje fotografij po datumu

Mike0 ::

Rabil bi pomoč pri naslednji nalogi:

Ureditev fotografij

Navdušeni fotograf Miha nima časa urejati fotografij, zato jih ima raztresene po vsem disku. Pomagaj mu fotografije urediti po datumu in uri.


Napišite skripto v BASHu, ki poišče vse fotografije (datoteke s končnico jpg (ne razlikujemo med velikimi in malimi črkami) in jih uredi v smiselno drevesno strukturo po letnici in mesecu, datoteko pa preimenuje v format: MMDD-HHMMSS. Podatke o nastanku fotografije preberite iz EXIF informacije (DateTimeOriginal) v sliki s pomočjo orodja exiftool različice 8.60. [20%]

- Uporabnik lahko poda dva argumenta: imenik v katerem se išče fotografije in imenik v katerega se zgradi drevesno strukturo. Če poda samo en argument se predpostavi, da se iskanje začne v trenutnem imeniku. Če ne podamo zadostnega števila argumentov, program javi napako na standardni izhod za napake. Napako izpiše v formatu: Uporaba: ime_programa [SOURCE] DEST. Izhodni status pa je 1. [5%]

- Program naj dejansko preveri, če lahko pišemo v imenik, ki smo ga podali kot ponor, kamor se zapiše drevesna struktura. [2%]

- Datotek dejansko ne premikati ali kopirati, ampak ustvarite samo novo ime, ki kaže na iste podatke. [2%]

- Ker lahko iskanje in obdelava trajata dolgo časa, sproti izpisujte, kateri imenik trenutno pregledujete in za vsako sliko v tem imeniku izpišite ".". Pri izpisu bodite natančni in izpisujete natanko to kar naloga zahteva od vas - do presledka natančno (glejte primer). [10%]

- Uspešno izveden program naj se zaključi z izhodnim statusom 0. [1%]

Primer klica:

$./urediFoto.sh
Uporaba: urediFoto.sh [SOURCE] DEST

$./urediFoto.sh Desktop Pictures
Desktop/card/DCIM/111_PANA/..
Desktop/card/DCIM/110_PANA/.
Desktop/slike/..
Desktop/DCIM/100NCD80/...
Desktop/sneg/.

Stanje v izvorni mapi pred klicem programa:



http://postimg.org/image/i2ybauyg1/


Stanje v ciljni mapi po klicu programa:


http://postimg.org/image/lvuiiihbr/

Slike, ki jih je treba sortirati so tle:

http://www.fileconvoy.com/dfl.php?id=g6...

#!/bin/bash

SOURCE="$1"
DEST="$2"

for f in $(find $1 -iname "*.jpg" -iname "*.JPG")

do
        
        if [ -f $f ]; then
                
		timestamp=$('%[exif:DateTimeOriginal]' $f)
                
                y=$(echo $timestamp | cut -c 1-4)
                m=$(echo $timestamp | cut -c 6-7)
                d=$(echo $timestamp | cut -c 9-10)
		
		ura=$(echo $timestamp | cut -c 12-13)
		min=$(echo $timestamp | cut -c 15-16)
		sec=$(echo $timestamp | cut -c 18-19)

                destFile=$2/$(basename $f)

                        mkdir "$2";
			
			
			
         fi

                        cp $f $destFile
                        echo "Moved $f to $destFile"
done

AndrejO ::

Kje se ti zatakne?

Mike0 ::

Tole je najnovejša verzija:

#!/bin/bash

SOURCE="$1"
DEST="$2"

if [ $# -eq 0 ] 

then
	
    	echo "Uporaba: $0 [SOURCE] DEST"
	exit 1

else [ $# -eq 1 ]

	SOURCE=$(pwd)
	
	DEST="$1"

fi


for f in $(find $1 -iname "*.jpg")

do
        
		timestamp=$(exiftool -TAG "-DateTimeOriginal" $f)
                
                y=$(echo $timestamp | cut -c 1-4)
                m=$(echo $timestamp | cut -c 6-7)
                d=$(echo $timestamp | cut -c 9-10)
		
		ura=$(echo $timestamp | cut -c 12-13)
		min=$(echo $timestamp | cut -c 15-16)
		sec=$(echo $timestamp | cut -c 18-19)

			if [ ! $dest -w ];do
			echo napaka
			exit 1
			fi


                        mkdir -p $DEST/$y/$m/
			
			ln -s -f $f "$DEST/$y/$m/$m$d-$ura$min$sec.jpg"
			
done

exit 0


Ne naredi map po datumih in ne naredi novih datotek. Probaj zagnati na linuxu, vrže par napak.

Gandalfar ::

Katero konkretno napako pa resujes?

kloko ::

exiftool sam omogoča rekurzivno iskanje po drevesni strukturi direktorijev in preimenovanje datotek glede na exif tage v slikah, za ta namen ne rabiš find ukaza.

L.p., Kloko

Mike0 ::

Ob klicu tole izpiše:

mihajlo@mihajlo-Lenovo-G550:~/Desktop/OSDN2$ sh urediFoto.sh Desktop Urejeno
File not found: Desktop/-.jpg
File not found: Desktop/Date/Ti/Tie
No file specified
ln: invalid option -- 'l'
Try 'ln --help' for more information.
File not found: .jpg


Rabim da mi prebere jpg-je in jih razporedi v mape po letih in mesecih, datoteke pa poimenuje MMDD-HHMMSS.jpg

AndrejO ::

Poskusimo po vrsti...

else [ $# -eq 1 ]

To ne bo šlo. Poglej si pravilno sintakso za celoten "if" stavek:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi


for f in $(find $1 -iname "*.jpg")

Če kličem skripto s samo enim parametrom, to je "kam naj se kopira", kaj bo ta stavek našel? Kje bo iskal?

nokaut240 ::

Z uporabo exiftoola sem uredil slike po mapah, potem se mi pa izpiše tole:
1 directories scanned
5 directories created
9 image files updated

Kako bi to obvestilo onemogočil ?

Mike0 ::

Uporabi stikalo -q

To pomeni quiet processing

golobich ::

Še vedno rabiš rešitev?

Zgodovina sprememb…

  • spremenil: golobich ()

Mike0 ::

Ne rabim več, lahko se zbriše temo tud. Hvala vseeno.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

php array sortiranje

Oddelek: Izdelava spletišč
91197 (920) Mesar
»

batch fajl iz txt (strani: 1 2 )

Oddelek: Programiranje
659773 (8434) b3D_950
»

[Bash] Preverjanje legalnosti poti

Oddelek: Programiranje
161463 (1090) piki12
»

Bash izpis datotek

Oddelek: Programiranje
111474 (1296) BigWhale
»

[Linux] izpis ure v lupini

Oddelek: Operacijski sistemi
101160 (919) kriko1

Več podobnih tem