Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: wplik wyszukujący pliki, niby proste ale jadnak...  (Przeczytany 3817 razy)

portable111

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« dnia: 2012-01-13, 19:40:23 »
Próbowałem napisać skrypt który wypisze 2 największe pliki z podanego katalogu (pliki i tylko pliki, nie uwzględniając podkatalogów).  ls -s i -f  = nie działa, próbowałem najróżniejszymi sposobami, nic nie wychodzi, nawet findem. Zawsze wypisuje również nazwę podkatalogu.
Proszę o pomoc.

arctgx

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #1 dnia: 2012-01-13, 20:43:12 »
Manuale poleceń: sort, tail (ls lub stat) oraz lektura przykładów użycia potoków (w ang. pipe) powinny wystarczyć Ci do zbudowania polecenia.

portable111

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #2 dnia: 2012-01-13, 20:59:41 »
Z całym szacunkiem ale jakbym ich nie znał to bym nie prosił o pomoc.

Jeszcze raz... próbowałem poleceniem ls -S , które zwraca zawartość katalogu posortowaną po rozmiarze i to przekierowuję potokiem na "head -2",  to polecenie bierze pod uwagę także katalogi znajdującę się w tym katalogu, i nie mam pomysłu jak je wyeliminować... Testowałem również inne opcje, niestety bezskutecznie.
Mógłby ktoś mi pomóc jaką opcję zastosować?

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #3 dnia: 2012-01-14, 00:47:45 »
Ja bym przy pomocy finda znalazł wszystkie pliki, kazał findowi wypisać ich nazwy oraz rozmiar, posortował po tej drugiej wartości po czym ograniczył wyjście do dwóch pierwszych (w przypadku sortowania malejąco) albo dwóch ostatnich (w przypadku sortowania rosnąco).

Nawiasem mówiąc, katalogi powinny zajmować minimalną wielkość przewidzianą przez system pliku (w większości domyślnych konfiguracji to będzie chyba 4 kB), więc powinny zaburzać Twoje pomiary tylko w sytuacji, gdy w podanym katalogu znajdują się wyłącznie katalogi i puste pliki. Ale w takiej sytuacji masz jeszcze inny problem: jak wybrać dwa największe spośród X plików o dokładnie takim samym rozmiarze?

arctgx

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #4 dnia: 2012-01-14, 01:22:11 »
Cytat: portable111
Z całym szacunkiem ale jakbym ich nie znał to bym nie prosił o pomoc.
Wysilałem się nieraz w dobrej wierze dla osób, którym zależało tylko na zaliczeniu. Dlatego wolę zacząć od zwięzłego naprowadzenia.

Racja, ls zwróci również katalogi. Test czy plik jest zwykłym plikiem możesz wykonać albo findem, albo jednym z odpowiedników polecenia test ([ lub w niektórych powłokach [[).

Ed. dobra, zerknij na przykład (z ls, bez finda, heada, sorta i sprawdzania czy trzeci plik ma taki sam rozmiar jak drugi itd.):
#!/bin/bash
((i=0))
ls -1Sl | while ((i<2)) && read prawa x u g rozm d1 d2 d3 plik; do
if [[ -f "$plik" ]]
then
echo $rozm $plik
((i++))
fi
done

xavery

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #5 dnia: 2012-01-17, 10:38:55 »
Cytat: portable111
Jeszcze raz... próbowałem poleceniem ls -S , które zwraca zawartość katalogu posortowaną po rozmiarze i to przekierowuję potokiem na "head -2",  to polecenie bierze pod uwagę także katalogi znajdującę się w tym katalogu, i nie mam pomysłu jak je wyeliminować...
Tak jak pisał Minio - find jest rozwiązaniem Twoich problemów. Pozwala właściwie dowolnie filtrować wybierane obiekty. Nie używaj ls w skryptach, jak już kiedyś pisałem - użycie tego polecenia w skryptach prawie zawsze jest niewłaściwe. W poście Minia masz gotowy przepis, wystarczy dobrać opcje do poleceń.

portable111

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #6 dnia: 2012-01-18, 13:39:34 »
Dzięki za pomoc.
Mam takie rozwiązanie:
 ls -lS | grep -v ^d | awk '{print $8 " " $5 " bits"} | head -4 | tail -3
Nie jest może optymalne ale działa. Nie miałem innego pomysłu jak to zrobić.
Chciałbym jednak jeszcze zapytać bo mnie to ciekawi: jak to zrobić z findem tak aby uwzględniło tylko i wyłącznie wszystkie pliki, nawet te puste.
Tak jak pisał Minio działa, ale przy pustych plikach są problemy.
Zastanawiam się i zastanawiam, i nic mi nie wychodzi.

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #7 dnia: 2012-01-18, 14:11:00 »
Może coś takiego
find . -maxdepth 1 -type f -printf "%s %p\\n" | sort -nr | head -2 | cut -d' ' -f 2

portable111

  • Gość
wplik wyszukujący pliki, niby proste ale jadnak...
« Odpowiedź #8 dnia: 2012-01-18, 18:23:13 »
Działa. Dzięki!