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
ethanak 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