Środa, 24 kwietnia 2024 r.
https://www.pichen.com/

Get Firefox!
Valid XHTML 1.0 Strict
Poprawny CSS!

Skrypty korzystające z narzędzia find

Skrypt 2.1.

Skrypt usuwa w zadanym drzewie katalogów podkatalogi a także podkatalogi, które stały się puste po wcześniej usuniętych podkatalogach.

#!/bin/bash
if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

kasowano=1
while [ $kasowano -ne 0 ]
do
        kasowano=0
        kasowano=`find $1 -type d -empty | (while read wynik
do
        rmdir $wynik
        kasowano=1
done
        echo $kasowano
        )`
done

Skrypt 2.2.

Skrypt dla zadanych 2 katalogów listuje katalogi o takich samych nazwach i scieżkach względnych w ramach drzew. Nie listuje katalogów pustych choćby w jednym z drzew.

#!/bin/bash
if [ $# -ne 2 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog plik_z_listą"
        exit 1
fi

if [ -d $1 ]
then
        if [ -e $2 ]
        then
                pliki=`cat $2`
        else
                echo "Nie ma pliku $2!"
                exit 1
        fi
else
        echo "$1 nie jest katalogiem!"
        exit 1
fi

for plik in $pliki
do
        if [ -e $plik ]
        then
                continue
        else
                touch $1/$plik
        fi
done

Skrypt 2.3.

Skrypt wyszukuje w zadanych dwóch drzewach katalogów pliki wyróżniające oba katalogi, tj. takie pliki, które występują w pierwszym dzewie ale nie w drugim i odwrotnie. Ponadto skrypt wyświetla pliki, który występują w obu drzewach ale mają różną zawartość.

#!/bin/bash
if [ $# -ne 2 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog1 katalog2"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

if [ ! -d $2 ]
then
        echo "$2 nie jest katalogiem!"
        exit 1
fi

WYNIK=`find $1 $2 -type f -printf "%P\n" | sort | uniq -u`

echo "Pliki z katalogu $2, których nie ma w $1:"
for PLIK in $WYNIK
do
        if [ -f "$2/$PLIK" ]
        then
                echo $PLIK
        fi
done


echo "Pliki z katalogu $1, których nie ma w $2:"
for PLIK in $WYNIK
do
        if [ -f "$1/$PLIK" ]
        then
                echo $PLIK
        fi
done

WYNIK=`find $1 $2 -type f -printf "%P\n" | sort | uniq -d`

echo "Pliki w obydwu katalogach, lecz o różnej zawartości:"

for PLIK in $WYNIK
do
        cmp -s "$1/$PLIK" "$2/$PLIK"
        if [ $? -ne 0 ]
        then
                echo $PLIK
        fi
done

Skrypt 2.4.

Skrypt wyświetla statystykę dotyczącą rozmiarów plików we wskazanym katalogu. Wyświetlana jest liczba plików małych, średnich oraz dużych w katalogu, ponadto wyliczany jest sumaryczny rozmiar plików dla wymienionych kategorii. Przyjęto następujące rozmiary dla poszczególnych kategorii: plik mały - do 5 kB, średni - pomiędzy 5 kB a 1 MB, duży - powyżej 1 MB.

#!/bin/bash
if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

licznik=0
rozmiar=0

for i in `find $1 -type f -size -5k -printf "%s\n"`
do
        let licznik=licznik+1
        let rozmiar=rozmiar+i
done
echo "Liczba plików o rozmiarze < 5 kB: $licznik"
echo "Sumaryczna wielkość tych plików: $rozmiar"

licznik=0
rozmiar=0

for i in `find $1 -type f -size +5k -size -1024k -printf "%s\n"`
do
        let licznik=licznik+1
        let rozmiar=rozmiar+i
done
echo "Liczba plików o rozmiarze w przedziale 5 kB - 1MB: $licznik"
echo "Sumaryczna wielkość tych plików: $rozmiar"

licznik=0
rozmiar=0

for i in `find $1 -type f -size +1024k -printf "%s\n"`
do
        let licznik=licznik+1
        let rozmiar=rozmiar+i
done
echo "Liczba plików o rozmiarze w przedziale > 1MB: $licznik"
echo "Sumaryczna wielkość tych plików: $rozmiar"

Skrypt 2.5.

Skrypt wyszukuje i zlicza w danym drzewie katalogów pliki wskazanego użytkownika oraz podaje sumaryczny rozmiar tych plików.

#!/bin/bash
if [ $# -ne 2 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog użytkownik"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

licznik=0
rozmiar=0

for i in `find $1 -type f -user $2 -printf "%s\n"`
do
        let licznik=licznik+1
        let rozmiar=rozmiar+i
done
echo "Liczba plików w katalogu $1 należących do użytkownika $2: $licznik"
echo "Sumaryczna wielkość tych plików: $rozmiar"

Skrypt 2.6.

Skrypt znajduje w zadanym katalogu wszystkie pliki wskazanego użytkownika, których rozmiar jest większy od rozmiaru podawanego jako argument wywołania skryptu.

#!/bin/bash
if [ $# -ne 3 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog użytkownik rozmiar"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

find $1 -type f -user $2 -size +$3c -print0

Skrypt 2.7.

Skrypt wyszukuje wszystkie twarde dowiązania do wskazanego pliku.

#!/bin/bash
if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 plik"
        exit 1
fi

if [ ! -f $1 ]
then
        echo "Nie ma pliku $1!"
        exit 1
fi

NUMER_IWEZLA=`stat -c %i $1`
echo "Trwa wyszukiwanie plików o numerze i-wezla: $NUMER_IWEZLA."
find / -inum $NUMER_IWEZLA 2> /dev/null

Skrypt 2.8.

Skrypt zmienia rozszerzenia wszystkich zwyczajnych plików z określonym rozszerzeniem, przy czym zmianie poddane zostaną tylko pliki posiadające prawo wykonywania dla innych użytkowników. Nowa nazwa rozszerzenia jest jednym z argumentów wywołania skryptu.

#!/bin/bash

if [ $# -ne 3 ]
then
   echo "Niepoprawna liczba argumentów."
   echo "Użycie: $0 katalog rozszerzenie1 rozszerzenie2"
   exit 1
fi

if [ ! -d $1 ]
then
   echo "$1 nie jest katalogiem!"
   exit 1
fi

find $1 -type f -perm +001 -name "*.$2" -exec rename ".$2" ".$3" "{}" \;

Skrypt 2.9.

Skrypt wypisuje w kolejności alfabetycznej nazwy wszystkich niepustych i zwyczajnych plików w podanym drzewie katalogów. Ponadto przed nazwą pliku wyświetla liczbę wystąpień poszczególnego pliku w podanym drzewie.

#!/bin/bash

if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]
then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

find $1 ! -empty -type f -printf "%f\n" | sort | uniq -c

Skrypt 2.10.

Skrypt wypisuje 3 największe oraz 3 najmniejsze pliki w zadanym drzewie katalogów.

#!/bin/bash
if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]; then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

licznik=0

find $1 -type f -printf "%s %p\n" | sort -n | awk '{ print $2 }' | while read linia
do
        echo "$licznik. $plik";
        (( licznik=$licznik+1 ));
        if [ $licznik == 4 ]
        then
                         break;
                 fi
         done

         echo "========== 3 najmniejsze pliki w katalogu $1 ================="

         licznik=1
         find $1 -type f | ls -Sr | while read plik
 do
         echo "$licznik. $plik";
         (( licznik=$licznik+1 ));
         if [ $licznik == 4 ]
         then
                          break;
                  fi
          done

Skrypt 2.11.

W zadanym drzewie katalogów skrypt znajduje regularne pliki tekstowe o wielkości nie większej niż 5 kB.
Przyjęto, że plik jest tekstowy wówczas, jeżeli pierwszy jego wiersz zawiera nie więcej niż 120 znaków. Nazwa katalogu jest argumentem wywołania skryptu.

#!/bin/bash

if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]; then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

find $1 -type f -size -5k | while read linia
do
if [ `head --lines=1 $linia | wc -c` -le 120 ]
then
        echo $linia
fi
done

Skrypt 2.12.

Skrypt wyszukuje w zadanym drzewie katalogów wszystkie pliki o wielkości ograniczonej przedziałem od 1 kB do 20 kB, posiadające pojedynczy znak kropki w nazwie (tj. jedno rozszerzenie).
Nazwa drzewa katalogów jest argumentem wywołania skryptu.

#!/bin/bash

if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [ ! -d $1 ]; then
        echo "$1 nie jest katalogiem!"
        exit 1
fi

find $1 -type f -size +1c -size -20k -name "*.*" ! -name "*.*.*"

Skrypt 2.13.

Skrypt dla zadanych dwóch katalogów wyświetla katalogi o takich samych nazwach i ścieżkach względnych w ramach drzew. Skrypt nie listuje katalogów pustych choćby w jednym z drzew.

#!/bin/bash

if [ $# -ne 2 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog1 katalog2"
        exit 1
fi

if [ ! -d $1 ]; then
echo "$1 nie jest katalogiem!"
exit 1
fi

if [ ! -d $2 ]; then
echo "$2 nie jest katalogiem!"
exit 1
fi

find $1 $2 -type d ! -empty -printf "%P\n" | sort | uniq -d

Skrypt 2.14.

Skrypt numeruje w zadanym drzewie katalogów pliki względem wielkości w ten sposób, że dodaje do nazwy plików odpowiednie rozszerzenia.

#!/bin/bash
if [ $# -ne 1 ]
then
        echo "Niepoprawna liczba argumentów."
        echo "Użycie: $0 katalog"
        exit 1
fi

if [[ ! -d $1 ]]; then
        echo "Nie ma katalogu $1!"
        exit 1
fi

i=0;
find $1 -type f | ls -S | while read plik
do
        echo $plik.$i;
        #
        # mv $plik $plik.$i;
        #
        (( i=$i+1 ));
done

Skrypt 2.15.

Skrypt wyszukuje w zadanym drzewie katalogów zwyczajne pliki zmodyfikowane później niż katalog w którym się znajdują.

#!/bin/bash

if [ $# -ne 1 ]
   then
   echo "Niepoprawna liczba argumentów."
   exit 1
fi

if [ ! -d  $1 ]
   then
   echo "Zadany parametr nie jest katalogiem."
   exit 1
fi


find $1 -printf "%h %p\n" | while read plik kat ;
do
   if [ "$kat" -nt "$plik" ]
   then
   echo $plik
   fi
done

Skrypt 2.16.

W zadanym drzewie katalogów skrypt traktuje dowiązania symboliczne do katalogów jako podkatalogi drzewa. W takim drzewie zliczane są wszystkie dowiązania symboliczne do zwyczajnych plików.

#!/bin/bash

if [ $# -ne 1 ]
   then
   echo "Niepoprawna liczba argumentów."
   exit 1
fi

if [ ! -d  $1 ]
   then
   echo "Zadany parametr nie jest katalogiem."
   exit 1
fi

find $1 -follow -xtype l | while read ln;
do
   if [ -f $ln ]
   then
   echo $ln
   fi
done | wc -l

Waszym zdaniem...

Na razie nie ma jeszcze żadnych komentarzy. Bądź pierwszy!

Aktualności

2017-05-14

Od dzisiaj strona jest dostępna wyłącznie w połączeniu szyfrowanym (bezpiecznym). Naprawiłem niedziałające odnośniki do galerii, usunąłem problem z wyświetlaniem znaków na starszych stronach relacji z Rosji, Ukrainy i Chin. Dodałem zdjęcia do mojego bloga o Malezji.

2017-05-07

Tydzień przeprowadziłem się do pracy do Kuala Lumpur w Malezji. Zapraszam do przeczytania mojego bloga dotyczącego tej przygody.

2017-03-21

Dodałem obsługę protokołu SSL. Strona dostępna jest także w bezpiecznej, zaszyfrowanej wersji. Drobne korekty w artykułach (dzięki Chris!). Zaktualizowałem sekcję Podróże.

2012-06-06

Dodałem relację z mojej podróży na wschód Kanady w 2010 r. Wzbogaciłem stronę o obsługę komentarzy. Naprawiłem formularz kontaktowy – odtąd korzysta z technologii AJAX. Przeszedłem na użycie tzw. „przyjaznych linków”.

2010-03-30

Dodałem wg mnie ciekawy artykuł opisujący sposób instalacji systemu openSUSE bez użycia nośników instalacyjnych. Do tego celu użyta zostanie technologia PXE umożliwiająca rozruch komputera z sieci. Zapraszam do przeczytania artykułu.

2009-07-18

Zaaktualizowałem informacje o sobie oraz dane kontaktowe. Dodałem nowe podstrony, tj. strony zawierające arytykuły dotyczące systemów UNIX oraz Linux. Ponadto dodałem odnośniki do moich profili na popularnych portalach społecznościowych. Na stronie pojawił się także odnośnik do mojej galerii zdjęć w systemie Google Picasa. Zaktualizowałem zbiór odnośników do relacji z podróży do Chin, Rosji i Mongolii.

2008-07-29

Dodałem podstronę, na której umieściłem przykładowe skrypty systemów uniksowych. Strona została przeniesiona na nowy serwer. Zmieniłem także kodowanie znaków strony na UTF-8.

2006-09-02

Dodałem galerię zdjęć. W galerii umieściłem zdjęcia z podróży do Chin, która odbyła się w 2005 roku. Jako, że aktualnie służę w wojsku, to w galerii umieściłem 4 zdjęcia z przysięgi wojskowej.
Osoby oczekujące na relację z Chin informuję, że jeszcze w tym roku powinna się pojawić na stronie.
 
© Copyright 2000 - 2024 Dawid Pichen. All rights reserved.