Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Linux/Bash/Skrypt] Przetwarzanie wyników ls
Forum PHP.pl > Inne > Komputery i oprogramowanie
starach
Witam,

  1. #!/bin/bash
  2. aPrefixes=(BioHz)
  3. sPathCstrike="/home/users/maxi/orglee/hlds/cstrike/"
  4. sPathPackedDemos=$sPathCstrike"packed/"
  5. for sPrefix in ${aPrefixes[@]}
  6. do
  7. iDemoIndex=0
  8. # Sort by time DESC
  9. aDemos=`ls -St $sPathCstrike$sPrefix*`
  10. iDemos=${#aDemos[*]}
  11. while [ $iDemoIndex -le $iDemos ]
  12. do
  13. echo -${aDemos[iDemoIndex]};
  14. done
  15. done
1. Znalazłem sporo przykładów wyrażeń warunkowych ( -le ) dla bash'a, ale żadnego zestawienia które by mi mówiło wprost co te literki oznaczają. Prosiłbym was o jakiś link bo niestety nie mogę nic sensownego znaleźć.
2. Ten skrypt zamiast wydrukować mi wszystkie adresy plików, drukuje mi w nieskończoność wszystko co zwróci polecenie ls. Proszę powiedzcie mi jak przetworzyć wynik tego polecenia żeby dostać się do poszczególnych ścieżek do plików.
thek
Ja napisałem w google -> ls bash i od razu na widoku dostałem stronę z manuala do ls -> http://ss64.com/bash/ls.html Tak więc nawet nie szukałeś :/
A jak przetwarzać? Przekieruj wyjście sobie do pliku i sparsuj
A jak przekierować?
ls -la > plik.txt
Ja nie widzę problemu by potem plik tekstowy parsować winksmiley.jpg
phpion
@thek:
Chyba nie zajarzyłeś problemu smile.gif

@orglee:
1. http://badmac.awardspace.com/index.php?id=bash
Cytat
-gt większy od
-lt mniejszy od
-ge większy, równy od
-le mniejszy, równy od
-eq równy
-ne różny od

2. Brakuje Ci pewnie inkrementacji zmiennej iDemoIndex.
thek
Zrozumiałem smile.gif Chłopak chce wyświetlić zawartość katalogu określonego, z tego co widzę, rekurencyjnie, tyle że nie chce wyświetlić jako takich nazw ale ścieżki. Do manuala ls podałem link, bo to o niego sądziło autorowi jak mniemam mówiąc o "literkach". Tyle, że ja podałem mu co potem ma zrobić z danymi. Bo chyba sobie tego na ekranie nie zostawi smile.gif Owszem... W powłoce może napisać skrypt, który mu poznajduje pasujące do wzorca rzeczy, ale jeśli ma on problem z napisaniem skryptu w nim na tyle poważny, że nie potrafi znaleźć stron MAN w necie, to nie uważasz, że napisanie skryptu go przerośnie? Lepiej niech wypisze rekurencyjnie dane do pliku i potem go sobie w php obrobi, na czym pewnie lepiej się zna.
ucho
Co do pomijania/wybierania N pierwszych/ostatnich linii polecam zapoznanie się z poleceniami head i tail np.
Kod
ls -la | tail -n +2
starach
phpion Faktycznie. Nawet chyba widziałem to w dokumentacji jakiegoś renderera PHP ( wydaje mi się że Smarty )

Poniżej prezentuję gotowy skrypt. ( PORYTY JEST TEN BASH! Nawet składni dobrze nie sprawdza grrr. )
  1. #!/bin/bash
  2.  
  3. aPrefixes=(BioHz)
  4. sPathCstrike="/home/users/maxi/orglee/hlds/cstrike/"
  5. sPathPackedDemos=$sPathCstrike"packed/"
  6.  
  7. sFtpHost="xxxx"
  8. sFtpUser="xxxx"
  9. sFtpPass="xxxx"
  10.  
  11. for sPrefix in ${aPrefixes[@]}
  12. do
  13. iDemoIndex=1
  14. # Sort by time DESC
  15. aDemos=(`ls -St $sPathCstrike$sPrefix*`)
  16. iDemos=${#aDemos[*]}
  17. while [ $iDemoIndex -lt $iDemos ]
  18. do
  19. echo -${aDemos[iDemoIndex]##*/}
  20. `gzip -9 ${aDemos[iDemoIndex]}`
  21. `sleep 3`
  22. `mv ${aDemos[iDemoIndex]}.gz $sPathPackedDemos`
  23. let iDemoIndex=iDemoIndex+1
  24. done
  25. done
  26.  
  27. # FTP Connect
  28. ftp -pnv $sFtpHost <<END_SCRIPT
  29. user $sFtpUser $sFtpPass
  30. ascii
  31. prompt
  32. lcd $sPathPackedDemos
  33. mput ./* ./
  34.   bye
  35.   bye
  36.   END_SCRIPT
  37.  
  38. sleep 12

ucho Litości! Nie dołuj mnie aż tak bo się chyba potne. tongue.gif

Dzięki Panowie za zainteresowanie.

Ciekawa sprawa mi się przytrafiła. Cały skrypt pisałem oddzielnie ( część listująco-pakującą i część ftp ). Jak już skończyłem musiałem je scalić. Jako że nie wiem jak to zrobić w vim'ie to zrobiłem to łącząc się z serwerem FTP przez total commandera edytując oba pliki w wordpadzie. Nadpisałem jeden z nich a niepotrzebny skasowałem. Kiedy chciałem go przetestować w całości wyświetlił mi się komunikat "zsh: no such file or directory: ./hltv-pack-and-ftp" niewiele myśląc walnąłem chmod +x, ale dalej to nic nie dawało, więc przepisałem skrypt pod inną nazwą i dopiero wtedy się uruchomił. Jest ktoś w stanie wyjaśnić mi ten mały fenomen?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.