Skrypty korzystające z narzędzia find
- 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.
- 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.
- 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ść.
- 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.
- 2.5. Skrypt wyszukuje i zlicza w danym drzewie katalogów pliki wskazanego użytkownika oraz podaje sumaryczny rozmiar tych plików.
- 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.
- 2.7. Skrypt wyszukuje wszystkie twarde dowiązania do wskazanego pliku.
- 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.
- 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.
- 2.10. Skrypt wypisuje 3 największe oraz 3 najmniejsze pliki w zadanym drzewie katalogów.
- 2.11. W zadanym drzewie katalogów skrypt znajduje zwyczajne pliki tekstowe o wielkości nie większej niż 5 kB.
- 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).
- 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.
- 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.
- 2.15. Skrypt wyszukuje w zadanym drzewie katalogów zwyczajne pliki zmodyfikowane później niż katalog w którym się znajdują.
- 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.
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!
Komentarz nie powinien zawierać tagów HTML. Zostaną one automatycznie usunięte.