» »

[Bash] Preverjanje legalnosti poti

[Bash] Preverjanje legalnosti poti

messi ::

Pozdravljeni ima kdo idejo kako preveriti če je pot legalna in sicer na naslednje načine:
Program naj dejansko preveri, če lahko pišemo v imenik, ki smo ga podali kot ponor, kamor se zapiše drevesna struktura

Mogoče ima kdo kako idejo kako ot naredit, ok uporabit if pa notri nekaj to je jasno, samo kaj nej bo tisto notri.

lp
vaš messi

BigWhale ::

man test

messi ::

Hmm ne morem se odločit za ker stikalo bo izbral..
gledam pa preverjanje datotek..

sas084 ::

Neki podobnega temu:

TESTDIR=test
if [ -w "$TESTDIR" ]; then
  #direktorij obstaja in ima pravice pisanja
fi

messi ::

Veš sas084 direktorij moramo mi ustvarit, samo prej moramo preverit, ali ima ustrezne pravice oz možnost da ke napišemo, sedaj sem razmišljal nekaj takega:
mkdir vaje || echo napaka && exit 2
kar je ok da mi izpiše napaka, ni pa ok da mi izpiše še default napako ..

BigWhale ::

Seveda preverjas parent direktorij, ce obstaja in ce lahko zapises kaj vanj. Ce lahko, potem lahko tam ustvaris tudi svoj direktorij, v katerega bos potem tako ali tako imel pravico pisanja

To lahko preveris z ukazom test oziroma [, tocno tako kot ti je predlagal sas084. Lahko uporabis tudi mkdir in kar poizkusis narediti direktorij, mkdir bo vrnil error level 1, ce direktorija ne bo moc ustvariti.

messi ::

Jaz potrebujem da mi vrne napako 2,
Nekaj me zanima, zakaj moram enkrat pri ifu napisat [], drugič pa [[]], ker mi napiše pri prvi unary expresion ?

messi ::

Sicer imate praw BigWhale in sas84, ena lepa zahvala sedaj skripta deluje tako kot se zagre. Hvala

messi ::

Ja sicer se pa pojvlja sedaj naslednji problem,
./mojbash.sh /home/messi dela ok
./mojbash.sh /home/messi/novamapa ne dela ker novamapa ne obstaja, vendar bi jo jaz želel da mi ne javi napake in da bi obstajala ta pot oz da ustvari novamapa, vendar mi javi napako :S
./mojbash.sh / - pa javi napako kar je ok

sas084 ::

Preveriš če mapa obstaja, če ne obstaja jo nardiš, s tem da pač dodaš še preverjanje ali imaš pravice pisanja oz tko kot je BigWhale napisu, probaš kar z mkdir naredit mapo in gledaš return code. Prilep skripto da bomo vidli kako maš narejeno.

TEST=test

if [ ! -e "$TEST" ]; then
  #mapa ne obstaja
else
  #mapa obstaja
fi

messi ::

Emm celo skripto ne žal ne morem, ker je to drugače aktulna naloga, na friju in ostalo sem že vse skoderal, samo pač tale del me zafrkava, ker vem da bodo nalogo pregledovali z algoritmom in ne nočem da nebi naredil letos:
Naloga je sicer takšna:
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%]
______________________________________________________________________________________________
Tale del tuki:
- 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/.

Datotečna struktura v izvornem imeniku pred klicem in stanje v ponornem imeniku po klicu vašega programa:


Moj izsek je za ta del je:
if [ -w $pot ]; then
  mkdir -p $pot
else
 echo "napačen direktorij" && exit 2
fi

Zgodovina sprememb…

  • spremenilo: messi ()

messi ::

Jaz bi sicer rešil na naslednji način, kot sem že zgoraj pokazal in preverjal z stikalom -e samo, ne vem če je pravilno:

if [-e $1 ]; then
   echo ""
else
mkdir vaje || echo napaka && exit 2
fi

Zgodovina sprememb…

  • spremenilo: messi ()

BigWhale ::

Ce das ti za destination direktorij potem moras preveriti en nivo visje, ce je moc pisati not.

Torej, ce je destination /my/photo/lib/recent moras preveriti ali lahko pises v /my/photo/lib in ce lahko, potem tam ustvaris direktorih recent.

Pravice za pisanje preverjas s switchem -w.

bigwhale@thefish:~$ [ -w / ]
bigwhale@thefish:~$ echo $?
1
bigwhale@thefish:~$ [ -w /home/bigwhale ]
bigwhale@thefish:~$ echo $?
0

sas084 ::

Potem verjetno neki v tem stilu: če pot ne obstaja in maš pravice pisanja, potle kreiraš mapo.

if [! -e $pot ]; then
  if [ -w $pot ]; then
    mkdir -p $pot
  else
    echo "napačen direktorij" && exit 2
  fi
fi

messi ::

Poz, sedaj sem spisal na takle način ali misliš da je pravilno, imam pa še eno vprašanje glede tega basha kako negiram situacijo oz kam moram dati da zanegiram pogoj da ni potrebno napisati echo -n"".
Potem me še zanima kakšna je razlika med if []; then in [[]]; then, ker ko sem primerjal 2 niza hoče imet 2 oklepaje, pa ne vem zakaj. Hvala za vso pomoč

#!/bin/bash
pot=$1
cpot=$pot
if [ $pot != "/*" ]; then
pot=${pot%/*}
fi
if [ -e $cpot ]; then
 echo -n""
else
if [ -w $pot ]; then
mkdir -p $cpot
fi
fi

Invictus ::

"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

piki12 ::

Prosim še meni kak nasvet:
zanima me kako preveriti, ali smo preusmerili na standardni izhod oz na standarni izhod za napke,
Primer kako preusmeriti, recimo:
mkdir -p /piki

na izhod za napake in tam izpisati recimo
echo "joj"

ter narediti izhod za napake 5
exit 5

Druga stvar je pa naslednja izpisat je potrebno da nimam pravic za branje in izhod 2 ter preusmerit na 2 izhod za napake:
Tole mislim da mi je uspelo
echo "Nimam pravice za branje iz datoteke" && exit 2 >&2


Lepo prosim za kako obrazložitev, brskal sem že po netu pa mi še ni jasno

lp
piki


Vredno ogleda ...

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

[Java] Kako izračunati hash diska.

Oddelek: Programiranje
335153 (3983) kunigunda
»

KAteri program za samodejni resize velike količine slik

Oddelek: Pomoč in nasveti
151090 (822) Hayabusa
»

[bash] Sortiranje fotografij po datumu

Oddelek: Programiranje
101452 (1013) Mike0
»

Bash, terminal,ubuntu

Oddelek: Operacijski sistemi
111454 (1095) Zero0ne
»

[UNIX] arg list too long

Oddelek: Programiranje
331941 (1196) bijonda

Več podobnih tem