Witam.
Zostały mi do zrobienia 2 zadanka i nie mogę sobie z nimi poradzić.
1. Napisz skrypt, który w aktualnym katalogu wybierze dwa pliki o najbliższym sobie rozmiarze.
2. Napisz skrypt, który w drzewie podkatalogów aktualnego katalogu wybierze dwa pliki o najbliższym sobie rozmiarze.
Byłbym bardzo wdzięczny za pomoc.
Pozdrawiam.
bash --- dwa zadanka?
Do sprawdzenia wielkości możesz użyć du, opatrzone odpowiednim cutem np.
da Ci wielkosc w bajtach wszytkich plikow z folderu.
Co do porownania... Nie mam w tej chwili żadnego pomysłu
Kod: Zaznacz cały
du -a | cut -f 1
Co do porownania... Nie mam w tej chwili żadnego pomysłu
-
- Beginner
- Posty: 296
- Rejestracja: 12 października 2007, 23:28
- Lokalizacja: Gliwice/Bielsko-Biała
Green pisze:1. Napisz skrypt, który w aktualnym katalogu wybierze dwa pliki o najbliższym sobie rozmiarze.
Kod: Zaznacz cały
set `find . ! -name . -prune -type f| xargs ls -l|awk '{print $5, $9}'|sort -n`
first_file=''
second_file=''
roznica=99999 #jak najwieksze, a najlepiej zainicjalizowac pierwszymi elemantami
while [ $# -gt 2 ]
do
if [ `expr $3 - $1` -lt $roznica ]
then
first_file=$2
second_file=$4
roznica=`expr $3 - $1`
fi
shift
shift
done
echo $first_file, $second_file
Dzięki wielkie tylko...
Nie wiem dla czego ale skrypt bierze pod uwagę wszystkie pliki, razem z ukrytymi :/ Jak znajdzie jakiś pierwszy plik to drugi jest najbliższy "w górę" czyli np. jak znajdzie plik o rozmiarze 33 to kolejny będzie np. 100 (i to jest najbliższy większy plik) ale jest też plik np. 30 :/
I czy mógłby mi ktoś opisać dokładnie działanie tego skryptu oraz wytłumaczyć mi działanie funkcji "find" i jak ona by wyglądała w 2`gim przykładzie. Pierwszy raz się z nią spotkałem.
Z góry wielkie dzięki za pomoc
Nie wiem dla czego ale skrypt bierze pod uwagę wszystkie pliki, razem z ukrytymi :/ Jak znajdzie jakiś pierwszy plik to drugi jest najbliższy "w górę" czyli np. jak znajdzie plik o rozmiarze 33 to kolejny będzie np. 100 (i to jest najbliższy większy plik) ale jest też plik np. 30 :/
I czy mógłby mi ktoś opisać dokładnie działanie tego skryptu oraz wytłumaczyć mi działanie funkcji "find" i jak ona by wyglądała w 2`gim przykładzie. Pierwszy raz się z nią spotkałem.
Z góry wielkie dzięki za pomoc

-
- Beginner
- Posty: 296
- Rejestracja: 12 października 2007, 23:28
- Lokalizacja: Gliwice/Bielsko-Biała
A czemu nie mialby brac pod uwage wszystkich plikow?Green pisze:skrypt bierze pod uwagę wszystkie pliki, razem z ukrytymi
Nie rozumiem o co Ci chodzi, wytłumacz to inaczej, a najlepiej pokaż na przykładzie co jest nie takGreen pisze:Jak znajdzie jakiś pierwszy plik to drugi jest najbliższy "w górę" czyli np. jak znajdzie plik o rozmiarze 33 to kolejny będzie np. 100 (i to jest najbliższy większy plik) ale jest też plik np. 30 :/
Chętnie wytłumaczę, ale jutro wieczorem, tylko uprzedzam, że nie jestem guru w tej dziedzinieI czy mógłby mi ktoś opisać dokładnie działanie tego skryptu oraz wytłumaczyć mi działanie funkcji "find" i jak ona by wyglądała w 2`gim przykładzie. Pierwszy raz się z nią spotkałem.

Jeszcze takie inne pytanko na szybko.
Na uczelni wywala mi takie coś:
Na uczelni wywala mi takie coś:
Kod: Zaznacz cały
expr: non-numeric argument
skrypt7.1.txt: line 8: [: -lt: unary operator expected
-
- Beginner
- Posty: 296
- Rejestracja: 12 października 2007, 23:28
- Lokalizacja: Gliwice/Bielsko-Biała
Zamień odpowiednią linię na tą:
Jeżeli nie chcesz wyszukiwać ukrytych plików to pierwszą kropkę w tym wyrażeniu zamień na "*", jeżeli chcesz przeszukiwać katalogi rekurencyjnie to usuń "-prune".
Tu masz skomentowany program:
Co do szczegółoweg znaczenia konkretnych komend odsyłam do manuali (polecenia man)
Kod: Zaznacz cały
set `find . ! -name . -prune -type f -printf '%s %p\n'|grep ^[0-9]|sort -n`
Tu masz skomentowany program:
Kod: Zaznacz cały
#!/bin/sh
#Przy pomocu 'find' wyszukujemy wszystkie pliki w katalogu i wyswietlamy je w formacie: 'rozmiar nazwa',
#'grep' usuwa wszystkie linie z błędami(nie zaczynające się od cyfry), 'sort' sortuje pliki od najmniejszego
# 'set' ustawia wynik tego programu jako parametry skryptu
set `find . ! -name . -prune -type f -printf '%s %p\n'|grep ^[0-9]|sort -n`
first_file=''
second_file=''
roznica=99999 #jak najwieksze, a najlepiej zainicjalizowac pierwszymi elemantami
#wykonujemy petle dopki liczba parametrow jest wieksza od 2
while [ $# -gt 2 ]
do
#sprawdzamy czy roznica rozmiarow dwoch plikow jest mniejsza od zapisanej
if [ `expr $3 - $1` -lt $roznica ]
then
first_file=$2
second_file=$4
roznica=`expr $3 - $1`
fi
#wyrzucamy pierwsze slowo(rozmiar i nazwa), i sprawdzamy nastepne
shift
shift
done
echo $first_file, $second_file