Stoppt die Vorratsdatenspeicherung! Jetzt klicken &handeln! Willst du auch an der Aktion teilnehmen? Hier findest du alle relevanten Infos
und Materialien:
Shellscripts
files_to_catch.sh

This script copies an amount of files with assigned values for the maximal and the
minimal filesizes als well as the total size into different dictionaries with also
assigned volumes.

It's probably not quite perfect, but it is deemed as experimental field to help
understanding to script.

###
So far there are those arguments to surrender:
1. the maximum filesize in k concerning the file(s) to copy
2. the minimum filesize in k concerning the file(s) to copy
3. the maximum filesize in k concerning the respective new directories
4. the total size in k concerning the file(s) to copy
5. the number of files to copy
6. the directory containing the file(s) to copy
7. the target directories

### Command ###
./files_to_catch.sh 10 1 10 100 100 ~ TEST;
###############

###files_to_catch_v1.2.sh###
#!/bin/bash

#set -x;
clear;
if [ "$#" -ne 7 ] || [ "$1" = "-h" ]; then

   echo "
   "
   echo "files_to_catch.sh -
         Copyrights 2004 by Thomas Ulrich Nockmann - tun@koeln-lug.de
   "
   echo "Usage: files_to_catch.sh  
         <sizes of directories> <summary of filesizes> <number of files>
         <Path to find> <Path to copy to>";
   echo "Example: ./files_to_catch.sh 10 1 10 100 100 ~ TEST;"
   echo "Type './files_to_catch.sh -h' to get this help."
   echo "
   "
   exit;
fi

OK="";
z=1;
for i in $1 $2 $3 $4 $5;do

   OK=`echo $i | gawk '/^[[:digit:]]+/&& !/.*[[:alpha:]]+.*/&& !
       /.*[[:punct:]]+.*/ {print "OK";}'`;
   if [ -z "${OK}" ];then
      case $z in
         1) NUMBER_OF_ARGUMENT="first";;
         2) NUMBER_OF_ARGUMENT="second";;
         3) NUMBER_OF_ARGUMENT="third";;
         4) NUMBER_OF_ARGUMENT="fourth";;
         5) NUMBER_OF_ARGUMENT="fifth";;
      esac
      echo "Please put an integer value into the
            " ${NUMBER_OF_ARGUMENT} " argument.";
      exit;
   fi
   OK=""
   z=`expr $z + 1`
done

#rm -rf TEST;

if [ -d "${7}" ];then
   DECISION="n";
   echo "
   ";
   echo "Directory '$7' exists with tho following contents.";
   ls -Alh "${7}"/*;
   echo "
   ";
   echo "Shell I remove it all and do continue?(y/n)"
   read DECISION
      if [ "${DECISION}" = "y"  ];then
         rm -rf "${7}"/*
         echo ""
      else
         echo "The programm is interrupted by the user."
         echo "EXIT"
         exit
      fi
      if [ $? -eq 0 ];then
         cd "${7}"
      fi
else
   DECISION="n"
   echo "
   ";
   echo "Directory '$7' does not exist.";
   echo "Shell I create it?(y/n)"
   read DECISION
   if [ "${DECISION}" = "y"  ];then
      mkdir "${7}"
      if [ $? -eq 0 ];then
         cd "${7}"
      fi
   else
      echo "The programm is interrupted by the user."
      echo "EXIT"
      exit;
   fi
fi


echo "
";
SUMMARY_OF_FILES=0;
SUMMARY_OF_FILES_FOR_EACH_DIRECTORY=0;
SIZE_OF_FILES=0;
NUMBER_OF_FILES=0;
NUMBER_OF_FILES_TO_GET=$5;
ADD_TO_NUMBER_OF_FILES_ALLOWED="TRUE";
COUNT_FILES=0;
typeset -i MAX_SIZE=$1;
typeset -i MIN_SIZE=$2;
typeset ALLOWED_SIZE_OF_DIRECTORIES=$3;
typeset ALLOWED_SUMMAY_OF_FILES=$4;
ALLOWED_SIZE_OF_DIRECTORIES=`expr $3 \* 1024`
ALLOWED_SUMMAY_OF_FILES=`expr $4 \* 1024`
NEW_DIRECTORIES=0;

if [ $((${ALLOWED_SUMMAY_OF_FILES})) -lt
     $((${ALLOWED_SIZE_OF_DIRECTORIES})) ];then
   echo "Arg 3 has to be greater or equal than Arg 4"
   exit
fi

until [  $((${SUMMARY_OF_FILES})) -gt $((${ALLOWED_SUMMAY_OF_FILES})) ]; do
   echo "
   "
   FOUND_FILES=`find $6 -type f -size -${MAX_SIZE}k -a  -size
                +${MIN_SIZE}k -maxdepth 1`;

   if [ -z "$FOUND_FILES"  ];then
      echo "No files are found";
      exit;
   else
      z=0;
      if [ -d 1 ];then
         rm -rf 1
      fi

      if [ "${ADD_TO_NUMBER_OF_FILES_ALLOWED}" = "TRUE" ]; then
         for i in $FOUND_FILES;do
            NUMBER_OF_FILES=`expr $NUMBER_OF_FILES + 1`
            #echo $NUMBER_OF_FILES
         done
         ADD_TO_NUMBER_OF_FILES_ALLOWED="FALSE"
      fi

      for i in $FOUND_FILES;do
         SIZE_OF_FILE[z]=`ls -l $i|tr -s " "|cut -f 5 -d " "`;

         if [ "$SIZE_OF_FILE" -gt 0 ];then
            SUMMARY_OF_FILES=`expr $SUMMARY_OF_FILES + $((${SIZE_OF_FILE[z]}))`

            if [ $((${SUMMARY_OF_FILES})) -gt $((${ALLOWED_SUMMAY_OF_FILES})) ];then
               echo "SCHLUSS"
               exit ;
            fi

            echo "SUMMARY_OF_FILES" $SUMMARY_OF_FILES
            echo "ALLOWED_SIZE_OF_DIRECTORIES" $ALLOWED_SIZE_OF_DIRECTORIES
            echo "ALLOWED_SUMMAY_OF_FILES" $ALLOWED_SUMMAY_OF_FILES

            SUMMARY_OF_FILES_FOR_EACH_DIRECTORY=`expr $SUMMARY_OF_FILES_FOR_EACH_DIRECTORY
                                                 + $((${SIZE_OF_FILE[z]}))`


            if [ "${NEW_DIRECTORIES}" -eq 0 ];then
               NEW_DIRECTORIES=1;
               mkdir $NEW_DIRECTORIES;

               if [ $? -eq 0 ];then
                 cd $NEW_DIRECTORIES;
               else
                  exit
               fi
            fi

            if [ $((${SUMMARY_OF_FILES_FOR_EACH_DIRECTORY})) -gt
                 $((${ALLOWED_SIZE_OF_DIRECTORIES})) ];then
               cd ..
               mkdir $NEW_DIRECTORIES
               cd $NEW_DIRECTORIES
               echo "Neues Verzeichnis" `pwd`

               SUMMARY_OF_FILES_FOR_EACH_DIRECTORY=0;
               NEW_DIRECTORIES=`expr $NEW_DIRECTORIES + 1`
            fi

            echo $i
            cp $i .

            COUNT_FILES=`expr $COUNT_FILES + 1`

            if [ $((${NUMBER_OF_FILES_TO_GET})) -lt $((${COUNT_FILES}))  ];then
               exit
            else
               if [ $((${COUNT_FILES=`expr $COUNT_FILES - 1`})) -gt
                    $((${NUMBER_OF_FILES}))  ]; then
                  echo "GROESSER"
                  echo $FOUND_FILES
                  exit;
               fi

               echo "Name der Datei: "$i
               echo "Groesse der Datei: "${SIZE_OF_FILE[z]} "SUMME:
                    "$SUMMARY_OF_FILES "ERLAUBTE GESAMMTGROESSE: "$ALLOWED_SUMMAY_OF_FILES
               echo "NUMBER_OF_FILES: " $NUMBER_OF_FILES
               echo "COUNT_FILES: " $COUNT_FILES

            fi

         else
            echo "TEST"
         fi

         z=`expr $z + 1`
         done

   fi
done
###

sort_user.sh

This script transforms German umlauts to vowels, so the discription is in German.

Dieses Skript verwendet die Datei "NUTZER_UNSORTIERT.txt", in der
unsortiert u.a. Name stehen.
Großbuchstabe werden in Kleinbuchstaben umgewandelt und Umlaute sowie
SZetts werden entfernt.
Dann werden sie sortiert und schließlich noch bei identischen Namen
mit Nummern versehen.

Das alles daürt jedoch übel lange und ich frage mich, ob man nicht
schnellere Algorithmen finden kann, vorallem der Bubblesort frist
Zeit. Bei einem 800/256 daürt der ganze Spaß über 1 Minute.



###-sort_user.sh-###
#!/bin/bash

#set -x
if [ ! -f /bin/bash ];then
 exit;
fi
clear;
echo "

"

ZAEHLER01=0
ZAEHLER02=0
GROSSBUCHSTABEN=""
KLEINBUCHSTABEN=""
UMLAUTE=""
ZAEHLER_NAME=0

if test -f gruppen.txt;then
 rm gruppen.txt
fi

if test -f NUTZER_UNSORTIERT.TXT;then
 cp NUTZER_UNSORTIERT.TXT benutzer.txt
else
 exit 0;
fi

# Die erste Zeile wird herausgefiltert und der Rest nach puffer01
gesichert.
sed '/^NAME/d' benutzer.txt > puffer01
mv puffer01 benutzer.txt

# Alle Zeilen, die kein Semikolon enthalten, werden herausgefiltert
und der Rest nach puffer02 gesichert.
sed '/;/!d' benutzer.txt > puffer02

# Alle Zeilen, die keinen Doppelpunkt enthalten, werden
herausgefiltert und der Rest nach gruppen.txt gesichert.
sed '/:/!d' benutzer.txt > gruppen.txt

# Die erste Zeile von gruppen.txt wird herausgefiltert und der Rest
nach puffer01 gesichert.
sed '/^SHELLS/d' gruppen.txt > puffer01

# benutzer.txt und gruppen.txt werden zurückgesichert.
#cp puffer01 gruppen.txt
#cp puffer02 benutzer.txt
mv puffer01 gruppen.txt
mv puffer02 benutzer.txt

if test -f neübenutzer.txt;then
 rm neübenutzer.txt
fi

 for GROSSBUCHSTABEN in A B C D E F G H I J K L M N O P Q R S T U V
W X Y Z ö ö ö
  do


   ZAEHLER01=`expr $ZAEHLER01 + 1`



   for KLEINBUCHSTABEN in a b c d e f g h i j k l m n o p q r s t u
v w x y z ö ö ö
    do

    ZAEHLER02=`expr $ZAEHLER02 + 1`

  if test $ZAEHLER01 -eq $ZAEHLER02
   then
    sed  's/'$GROSSBUCHSTABEN'/'$KLEINBUCHSTABEN'/g' benutzer.txt >
puffer01
    #echo "Aktüller Großbuchstabe ist: " "$GROSSBUCHSTABEN"
    #echo "Aktüller Kleinbuchstabe ist: " "$KLEINBUCHSTABEN"
#"$ZAEHLER01" "$ZAEHLER02"
    #echo "Aktüller Zähler01 ist: " "$ZAEHLER01"
    #echo "Aktüller Zähler02 ist: " "$ZAEHLER02"
    #cat puffer01;
    if test -f puffer01;then
     #cp puffer01 benutzer.txt;
     mv puffer01 benutzer.txt;
    fi
    #sleep 1;
    ZAEHLER02=0
   break
  fi
    done
  done

   for UMLAUTE in ö ö ö ö
    do
     case $UMLAUTE in
     ö) sed 's/ö/ä/g' benutzer.txt > puffer01 ;;
     ö) sed 's/ö/ö/g' benutzer.txt > puffer01 ;;
     ö) sed 's/ö/ü/g' benutzer.txt > puffer01 ;;
     ö) sed 's/ö/ß/g' benutzer.txt > puffer01 ;;
     esac
     #cp puffer01 benutzer.txt
     if test -f puffer01;then
      mv puffer01 benutzer.txt
     fi
     #echo "Aktüller Umlaut ist: " $UMLAUTE;
     #sleep 1;
    done

if test -f puffer01;then
 rm puffer01
fi

if test -f puffer02;then
 rm puffer02
fi
#rm puffer01 puffer02

if test -f benutzer_neu.txt
then
 rm benutzer_neu.txt
fi

COUNT_OF_USERS=`cat benutzer.txt| cut -f1 -d";" |wc -l`

i=1;
COUNT_OF_USERS=`expr $COUNT_OF_USERS + 1`;
COUNT_OF_DELETE=0;

while [ "$i" -lt "$COUNT_OF_USERS" ];do

 if [ `echo $(head -n $i benutzer.txt|tail -n 1|cut -f1 -d
";") |tr -s " "|cut -f1 -d\; |grep " "|wc -w` -eq 0 ];then
  echo `head -n $i benutzer.txt|tail -n 1|cut -f1 -d
";"`>>benutzer_neu.txt;
 else
  echo `head -n $i benutzer.txt|tail -n 1|cut -f1 -d
";"` |tr -s " "|cut -f"${CUT_IT=`echo $(head -n $i
benutzer.txt|tail -n 1|cut -f1 -d ";") |tr -s " "|cut -f1 -d\;
|grep " "|wc -w`}" -d " ">>benutzer_neu.txt;
 fi
 i=`expr $i + 1`
 #sleep 1;

done

USER_TO_SORT=`cat benutzer_neu.txt|   cut -f1 -d\;`
COUNT_USER_TO_SORT=0;

for i in $USER_TO_SORT; do
 USER_TO_SORT_ARRAY[COUNT_USER_TO_SORT]=$i;
 USER_TO_CHANGE=$i
 COUNT_USER_TO_SORT=`expr $COUNT_USER_TO_SORT + 1`;
done

NEW_USER_TO_SORT_1=""
NEW_USER_TO_SORT_2=""

SORT_IS_OK="FALSE"
i=0;

while [ $i -lt $COUNT_USER_TO_SORT ];do
 while [ "$SORT_IS_OK" = "FALSE" ]; do
  echo "
   "
  i_2=`expr $i + 1`

  if [ "${USER_TO_SORT_ARRAY[i]}" \< "${USER_TO_SORT_ARRAY[i_2]}"
];then
   echo "Benutzer"$i "  heißt: " ${USER_TO_SORT_ARRAY[i]}
   echo "Benutzer"$i_2 "  heißt: " ${USER_TO_SORT_ARRAY[i_2]}
   echo "Benutzer"$i "  ist   KLEINER als Benutzer" $i_2
   SORT_IS_OK="FALSE"

  elif [ "${USER_TO_SORT_ARRAY[i]}" \= "${USER_TO_SORT_ARRAY[i_2]}"
];then
   echo "Benutzer"$i "  heißt: " ${USER_TO_SORT_ARRAY[i]};
   echo "Benutzer"$i_2 "  heißt: " ${USER_TO_SORT_ARRAY[i_2]};
   echo "Benutzer"$i "  ist   GLEICH Benutzer"$i_2
   SORT_IS_OK="FALSE"

  elif [ "${USER_TO_SORT_ARRAY[i]}" \> "${USER_TO_SORT_ARRAY[i_2]}"
];then

   if [ -z "${USER_TO_SORT_ARRAY[i_2]}" ];then
    echo "Benutzer"$i "  heißt: " ${USER_TO_SORT_ARRAY[i]}
    echo "Benutzer"$i "  ist der letzte Benutzer!"
    SORT_IS_OK="TRUE"
   else

    echo "Benutzer"$i "  heißt: " ${USER_TO_SORT_ARRAY[i]};
    echo "Benutzer"$i_2 "  heißt: " ${USER_TO_SORT_ARRAY[i_2]};
    echo "Benutzer"$i "  ist   GROESSER als Benutzer"$i_2;
    NEW_USER_TO_SORT_1=${USER_TO_SORT_ARRAY[i_2]};
    NEW_USER_TO_SORT_2=${USER_TO_SORT_ARRAY[i]};
    USER_TO_SORT_ARRAY[i]=${NEW_USER_TO_SORT_1};
    USER_TO_SORT_ARRAY[i_2]=${NEW_USER_TO_SORT_2};
    i=-1;
    i_2=0;
    SORT_IS_OK="FALSE"
   fi
  fi

  i=`expr $i + 1`
  #sleep 1;
 done

echo "
 "

 echo $SORT_IS_OK;
 echo "
  "
done

i=0;
i_2=1;

while [ $i -lt $COUNT_USER_TO_SORT ];do

  if [ "${USER_TO_SORT_ARRAY[i]}" \= "${USER_TO_SORT_ARRAY[i_2]}"
];then
   USER_TO_SORT_ARRAY[i]=${USER_TO_SORT_ARRAY[i]}$ZAEHLER_NAME;
   ZAEHLER_NAME=`expr $ZAEHLER_NAME + 1`
   USER_TO_SORT_ARRAY[i_2]=${USER_TO_SORT_ARRAY[i_2]}$ZAEHLER_NAME;
   ZAEHLER_NAME=`expr $ZAEHLER_NAME + 1`
   i=0;
   i_2=1;
   sleep 1;
  else
   i=`expr $i + 1`
   i_2=`expr $i_2 + 1`
  fi
done

i=0;
while [ $i -lt $COUNT_USER_TO_SORT ];do

   echo "Benutzer"$i"  heißt: " ${USER_TO_SORT_ARRAY[i]}
   i=`expr $i + 1`
done


if test -f benutzer_neu.txt
then
 rm benutzer_neu.txt
fi

exit;
###


###
$cat NUTZER_UNSORTIERT.txt
NAME      GRUPPE
Östereich; Ute;  Personal
Zahlmann; Jetzt; Lager
unter den Fichten; Elvira;       Leitung
Clinton; Hugo;   Leitung
Dörner; Werner;  Personal
Förster; Carsten;       Service
Möller; Uwe;     Technik
Möller; Willi;   Technik
Möller; Anna;    Technik
Möller; Rolf;    Technik
Gabriel; Gönther;       Vertrieb
Wintersee; Hans; Admin
Immer; Johannis; Technik
Junghans; Lars;  Lager
Klugmann; Ilse;  Leitung
Lindemann-Zöse; Ina;    Personal
Möller; Ute;     Admin
Wintersee; Alf;  Admin
Busch; Arnold;   Admin
Neumann; Matthias;      Service
Oppermann; Susanne;     Service
Pömpel; Ruth;    Technik
Xyh-Hai; Mhi-Ho; Service
Quoos; Peter;    Admin
Rönner; Dieter;  Service
Stump; Rödiger;  Personal
unter den Tannen; Ludwig;        Leitung
Unterfang; Ilse; Personal
von Kahl; Hans-Dieter;  Technik
Wintersee; Lars; Admin
Förster; Willy;  Service
Hamann-Fischer; Kai     Vertrieb
Wintersee; Peter;       Admin
Yps; Ja;  Technik
Möller; Paul;    Technik
Eschweiler; Bruno;      Lager
Eschweiler; Elke;       Lager

 SHELLS:
 Personal: bash
 Technik:  tcsh
 Admin:    sh
 Leitung:  bash
 Vertrieb: csh
 Lager:    ksh
 Service:  ksh
###