Welcome to the KGLUG - Die Kölner Gentoo Linux User Group
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
###