Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
Męczę się z napisaniem pewnego skrpytu. Stanąłem w miejscu w którym chcę sprawdzić czy w danym katalogu jest jakiś pusty plik.
Może zacznę od początku jak to działa... skrypt "a" tworzy x pustych plikow nazwa.txt.. potem inny skrpyt uzupelnia te puste pliki wczesniej utworzone pobranymi danymi.
Może zdarzyć się sytuacja że któryś z tych plików pozostanie pusty i wtedy chciałbym uzyskać informację że nastąpiła taka sytuacji.
Dla potrzeb forum zamiast akcji przy warunkach wpisałem ok, nok.
OK ma być gdy wszystkie pliki w katalogu nie są puste
NOK gdy chociaż 1 plik jest pusty.
Mój problem polega na tym że wynikiem mojej pętli jest lista w której są wypisane informacje o każdym pliku a więc
ok
ok
warn
ok...
a nie pojedynczy wynik "ok" lub "warn". Czy mógłby mnie ktoś nakierować co robię źle?
for i in $tempdir/*.txt; do if [[ -s $i ]]; then echo ok else echo warn fi done
Offline
Ustaw sobie pusty string na dzień dobry, a w pętli jak plik będzie pusty to wstaw do tego stringu np. "dupa" i wykonaj break.
po wyjściu z pętli sprawdź dupę...
Offline
Nie ma jakiejś komendy która pozwoliłaby wyciągnąć stan tak/nie 0/1 prawda/falsz lub jakikolwiek inny z pętli?
Na zasadzie grep'owego if [ $? –eq 0 ]
Chciałbym zacząć pisać kod "zgodnie ze sztuką" a nie "obejściami". Równie dobrze mogę przeanalizować wynik jakimś grepem ale miałem nadzieję że są do tego gotowe instrukcje.
Ostatnio edytowany przez moro (2018-06-11 13:37:15)
Offline
A co Ci się nie podoba w moim rozwiązaniu?
Co jest niezgodne ze "sztuką" (czymkolwiek by ona nie była)?
Napisz i odpowiedź uzasadnij.
Offline
Nie wiem. Po prostu myślałem że można to wyciągnąć "bezpośrednio z pętli"
Wynik z tamtej pętli wrzuciłem do pliku i dopisałem jeszcze jedną pętle
cat /tmp/petla.txt | grep -i warn if [ $? -eq 0 ] ; then echo warning else echo ok
Ostatnio edytowany przez moro (2018-06-11 13:52:25)
Offline
No więc właśnie pokazałem Ci, jak to można wyciągnąć bezpośrednio z pętli... po cholerę jakieć caty i grepy jak wystarczy dupę powąchać, np:
if ["$string" = "dupa"]
Offline
Jak dla mnie, to "wbrew sztuce" jest zalozenie, ze trzeba porownywac rozmiar plikow. Tworzenie plikow z zerowa zawartoscia nie jest ladnym rozwiazaniem. Nie lepiej byloby gdyby jeden skrypt tworzyl pliki z nazwami z pewnego klucza i wrzucal do nich potrzebne informacje. Drugi skrypt przeszukiwalby nazwy wedlug odpowiedniego klucza i wyswietlal / przetwarzal dane.
Offline
[b]ethanak[/b] dobrze Ci radzi:
dupa=0 for i in $tempdir/*.txt; do if [[ ! -s $i ]]; then dupa=1 fi done if [ $dupa -eq 1 ]; then echo warn else echo ok fi
Ostatnio edytowany przez Blackhole (2018-06-11 17:12:10)
Offline
Jest cos takiego:
-s FILE FILE exists and it's size is greater than zero (ie. it is not empty).
sprawdzisz pliki a ktory nie wchodzi do warunku, kasacja
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00007 | SET NAMES latin2 |
0.00133 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.227.0.255' WHERE u.id=1 |
0.00079 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.227.0.255', 1732378186) |
0.00054 | SELECT * FROM punbb_online WHERE logged<1732377886 |
0.00081 | SELECT topic_id FROM punbb_posts WHERE id=319744 |
0.00008 | SELECT id FROM punbb_posts WHERE topic_id=30488 ORDER BY posted |
0.00092 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30488 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00158 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30488 ORDER BY p.id LIMIT 0,25 |
0.00097 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30488 |
Total query time: 0.00727 s |