Portál AbcLinuxu, 13. května 2025 13:04

Dotaz: Zjisteni existence souboru

14.11.2008 15:11 Tod
Zjisteni existence souboru
Přečteno: 2480×
Odpovědět | Admin
Mohl by nekdo poradit? Mam tri soubory s1, s1.head a s1.mid . V souboru s1.head jsou udajne rádky 1-10 (vcetne) a v s1.mid jsou udajne radky 30-40 (vcetne) ze souboru s1 a mam zjistit zda-li to je pravda. Jakym zpusobem zjisti, zda soubor existuji? Urcite tam bude podminka, ale jaky je prikaz pro overeni, zda-li ten soubor tam je ?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.11.2008 15:37 plamen
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak třeba v bashi:
if [ -f path/filename ] ; then
  echo "Našli rádcové, našli!"
fi
viz spousty skriptů, které máš určitě na systému :-)

Pokud nemáš bash, tak doporučuji prohledat init skripty tvého systému, tam přece musí nějaký test na existenci souboru být ....
14.11.2008 19:38 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
[ je externý príkaz. /usr/bin/[ alebo /bin/[. Iné meno pre ten istý príkaz je test. Ten if v predchádzajúcom príspevku vlastne testuje návratový kód externe spusteného príkazu. Pre ďalšie informácie viď man test.
15.11.2008 00:15 plamen
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Máš pravdu. Takže by to chodilo i v POSIX shellu. Předpokládal jsem, že test je obvykle na systému nainstalován včetně varianty [. A pokud nebude, tak init skripty začátečníka navedou jak to napsat na konkrétním stroji tak, aby to chodilo.
16.11.2008 14:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Technická poznáka: v bashi je test (a '[') builtin.
15.11.2008 15:53 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
na co to proboha potřebuješ? tohle smrdí nějakym domácim úkolem :)

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
tsLnox avatar 16.11.2008 10:36 tsLnox | skóre: 31 | blog: Blog jednoho ukecaného Gentoolemana | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
taky mě to napadlo :-D ale nebudme zli, poradme mu :-D (teda vy, já vůbec nevím jak :-D)
16.11.2008 14:44 Tod
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Konkretne bych to potreboval aplikovat na soubory s1,s1.head,s1.mind. V souboru s1.head jsou udajne radky 1-10 (vcetne) a v s1.mind jsou udajne radky 30-40 (vcetne) ze souboru s1 a mam zjistit zda-li je to pravda
16.11.2008 14:53 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
To už si psal :)

Ok, poradim Ti, ale jen když mi řekneš co to je za úkol - školu, ročník, jméno předmětu a vyučujícího ;)

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
16.11.2008 15:20 Tod
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
CVUT, prvni rocnik :D, jmeno vyucujiciho do dneska nevim
17.11.2008 13:53 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Žďárek. To jméno je Žďárek - zapamatuj si ho. Ikdyby to nebyl on :)

Zjištění existence souboru je jednoduché pomocí test, viz man test (příkaz test zjednodušeně vrátí true nebo false). To pak otestuješ pomocí if (test je normální unixovej příkaz):
if příkaz; then
 další příkaz
fi
tohle bys našel v man bash, ale ten je dost obsáhlej a hledá se v něm blbě. hlavně bacha na ten středník. Výsledek příkazu se dá obrátit pomocí vykřičníku:
if ! příkaz; then (bacha na tu mezeru)
--

Porovnání částí souboru v bashi in-place nejde (čti: neumim :) ), ale s trochou nápaditosti si poradíš i bez dočasných souborů. Jenže to by asi bylo dost podezřelý, takže naznačim řešení s dočasnym souborem:
tvrzení:
 v s1 jsou data
 v s1.head je 1-10. řádek z s1
 v s1.mid je 30-40. řádek z s1

důkaz: pomocí příkazu head (man head) si do nějakého dočasného souboru (třeba s1.tmp) uložíme prvních 10 řádků ze souboru s1:
head (něco) > s1.tmp
potom pomocí příkazu diff zjistíme, zda jsou soubory s1.head a s1.tmp stejné (man diff):
diff (něco)
(tady poradím, že příkaz diff vrací, mimo textového výstupu, i TRUE nebo FALSE, podobně jako příkaz test. TRUE je když jsou soubory stejné)

testování souboru s1.mid provedeme obdobně, obsah souboru s1.tmp získáme kombinací příkazů head a tail (man tail)
head (něco) | tail (něco) > s1.tmp
--

napiš, jak Ti to jde a cos vymyslel, opravíme, vymyslíme a odladíme ;)

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
17.11.2008 14:31 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Takovéhle věci ale pokud možno nedělejte ve skriptech, které poběží s pracovním adresářem, do něhož má právo zápisu i někdo další.
17.11.2008 19:45 Tod
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Mockrat dekuji, moc pekne reseni,

ale jak mam output true/false z diff vypsat?

17.11.2008 19:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Buď ten příkaz použijete jako podmínku nebo využijete toho, že se $? expanduje na návratovou hodnotu posledního provedeného příkazu. Mimochodem, máte pocit, že si ten zápočet opravdu zasloužíte?
17.11.2008 20:10 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
neboj, pokud to nepochopí, od Žďárka zápočet nedostane...

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
17.11.2008 20:16 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
ale jak mam output true/false z diff vypsat?
přečti si tu mojí odpověď ještě jednou a pořádně...

-m.
Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
16.11.2008 14:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Zjisteni existence souboru
Tak třeba vytáhnout ty řádky (sed, awk, head + tail) do pomocných souborů (mktemp) a porovnat (cmp, diff).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.