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.00014 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00103 | 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.221.192.248' WHERE u.id=1 |
0.00066 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.221.192.248', 1732377695) |
0.00056 | SELECT * FROM punbb_online WHERE logged<1732377395 |
0.00087 | DELETE FROM punbb_online WHERE ident='18.118.19.123' |
0.00085 | DELETE FROM punbb_online WHERE ident='18.188.110.150' |
0.00068 | DELETE FROM punbb_online WHERE ident='18.191.200.223' |
0.00077 | DELETE FROM punbb_online WHERE ident='18.218.95.236' |
0.00088 | DELETE FROM punbb_online WHERE ident='18.223.237.218' |
0.00078 | DELETE FROM punbb_online WHERE ident='185.191.171.2' |
0.00068 | DELETE FROM punbb_online WHERE ident='3.129.195.254' |
0.00069 | DELETE FROM punbb_online WHERE ident='3.136.26.156' |
0.00083 | DELETE FROM punbb_online WHERE ident='3.138.134.221' |
0.00076 | DELETE FROM punbb_online WHERE ident='3.144.101.75' |
0.00075 | DELETE FROM punbb_online WHERE ident='3.145.196.150' |
0.00096 | DELETE FROM punbb_online WHERE ident='3.145.68.167' |
0.00073 | DELETE FROM punbb_online WHERE ident='3.146.37.222' |
0.00066 | DELETE FROM punbb_online WHERE ident='3.149.232.87' |
0.00085 | SELECT topic_id FROM punbb_posts WHERE id=319745 |
0.00123 | SELECT id FROM punbb_posts WHERE topic_id=30488 ORDER BY posted |
0.00087 | 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.00012 | SELECT search_for, replace_with FROM punbb_censoring |
0.00084 | 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.00074 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30488 |
Total query time: 0.01798 s |