Prosze napiszcie mi skrypt!

0

W zadanym drzewie katalogów znajdź pliki regularne tekstowe, o wielkości nie większej niż
5 kB. Plik jest tekstowy, jeżeli jego pierwszy wiersz zawiera nie więcej niż 120 znaków.

0

w czym ma to być napisane ?

0
#!/bin/sh
pliki=`find $1 -type f -a -size -5120c`
for plik in $pliki
do
    if head -c 121 $plik | grep '\n' > /dev/null
    then
        echo $plik
    fi
done

/* dopisane */
Grep tak nie załapie :( Jeszcze nie wiem jak zmusić grep do takiej pracy :(

0

w czym ma to być napisane ?

ma to byc napisane w bashu

Skrypt ma byc napisany w bashu i jesli moge prosic to napiszcie jakis poisik co dana linojka ma robic. dzieki wielkie dla Dryobatesa :)

0
#!/bin/sh
pliki=`find $1 -type f -a -size -5120c`
for plik in $pliki
do
    if head -c 121 $plik | tr "\r\n" " \r" | grep '
' > /dev/null
    then
	echo $plik
    fi
done

To już powinno działać.
pliki=find $1 -type f -a -size -5120c``
Pod pliki podstawiana jest lista plików znaleziona przez w find w katalogu $1 (czyli pierwszym parametrze skryptu), które są plikami regularnymi (-type f) i (-a) o rozmiarze (-size) nie większym niż 5kB (-5120c).

Następnie dla każdego pliku z tej listy:

  • odczytujemy pierwsze 121 znaków
  • zamieniamy w tym fragmencie wszystkie znaki '\r' na spacje, a '\n' (czyli koniec linii) na '\r'
  • zmuszamy grep do znalezienia znaku '\r' (znak o kodzie 13, tutaj zapisany przez ^M. W vi zapiszesz go wciskając Ctrl+V w trybie edycji i naciskając enter).

Wyniki wyszukiwania przekierowujemy do kosza (bo nie są nam potrzebne, ale grep zwróci odpowiedni status, jeżeli znalazł taką linijkę (czyli znak końca lini jest przed 121 znakami) to mamy plik tekstowy i wypisujemy jego nazwę.

Należy się piwo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1