Nowe posty

Autor Wątek: Polecenie find - ścieżka do katalogu jako zmienna  (Przeczytany 5165 razy)

Joanna94

  • Gość
Polecenie find - ścieżka do katalogu jako zmienna
« dnia: 2014-05-24, 22:51:46 »
Witam! Robię mały skrypt, który ma wyświetlać posortowaną listę plików z zadanego katalogu, które przekraczają podany parametrem rozmiar.
Napisałam otoczkę skryptu - wczytywanie parametrów getopts + case. W case umieściłam kod, który powinien wykonywać wyżej wymienione funkcje, ale nie działa jak powinien.
Chodzi mi o tą linię:

find "$a" -type f -size +"$b" | ls -l

Pliki się sortują, ale wypisuje mi wszystko jak leci i zawsze z bieżącego katalogu, czyli tak jakby nie widziało tego co jest po lewej stronie pipeline.
Jak mogę to zmienić, aby poprawnie działało?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Polecenie find - ścieżka do katalogu jako zmienna
« Odpowiedź #1 dnia: 2014-05-25, 00:17:23 »
find "$a" -type f -size +"$b" | ls -l
| ls -l
a po co to?

Pipe przekazuje wynik polecenia po lewej stronie na wejście tego po prawej.
Jako, że ls nie przyjmuje w ogóle danych na swoim wejściu, to pipe nie zmienia jego działania.
Więc Twoja linia jest równoważna:
ls -l
a więc skrypt robi dokładnie to o co go poprosiłaś :)

Żeby wyświetlić więcej danych na temat znalezionych plików, użyj opcji -printf polecenia find:
man find

Joanna94

  • Gość
Polecenie find - ścieżka do katalogu jako zmienna
« Odpowiedź #2 dnia: 2014-05-26, 00:29:33 »
bo on ma nie tylko wyświetlać posortowane po nazwie :)
chciałam móc zadać na wejściu dowolną ścieżkę do dowolnego katalogu, którego pliki mnie interesują, oraz rozmiar, od którego większe mają mi się wyświetlić. i wtedy, wg mojej koncepcji, miał wkroczyć ls i dodatkowo posortować wynik wyświetlania

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3069
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Polecenie find - ścieżka do katalogu jako zmienna
« Odpowiedź #3 dnia: 2014-05-26, 13:28:26 »
Tylko, że LS nie służy do sortowania. Do sortowania służy SORT...
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Polecenie find - ścieżka do katalogu jako zmienna
« Odpowiedź #4 dnia: 2014-05-26, 16:18:33 »
Zarówno find jak i ls wyświetlają listę plików. Nie ma więc sensu używać obu, za to zadanie wyraźnie wskazuje na użycie find-a ze względu na filtrowanie rozmiarem pliku.
Odpal samo to polecenie find i zobacz rezultat. Potem pobaw się jego opcją -printf.

A do sortowania służy sort. Z parametrami, jeśli np. kolumna po której chcesz sortować nie jest pierwszą (-k), albo gdy chcesz sortować numerycznie, itd.

man find - http://man7.org/linux/man-pages/man1/find.1.html
man sort - http://man7.org/linux/man-pages/man1/sort.1.html

Pozdrawiam.