[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Verzeichnis mit vielen Dateien aufteilen



On Samstag, 3. Januar 2004 13:33, frank paulsen wrote:

Hallo Frank,


> ich habe ein verzeichnis mit ein paar GB bildchen, die ich aus
> abpr gesaugt habe, fein saeuberlich auf DVD-groesse abgestimmt.
>
> fuer einen bekannten moechte ich das jetzt auf mehrere CD
> brennen, nur fehlt mir die kroenende idee, wie ich das jetzt auf
> unterverzeichnisse mit jeweils etwa 650MB aufteile.


daran bastle ich auch gerade. Ist wohl noch nicht perfekt, aber 
vielleicht kannst Du damit ja was anfangen. Ist auch nochmal als 
Anhang dran. Vielleicht kann mir ja jemand einen Tipp geben, warum 
die erste Datei zum Schluss nocheinmal kopiert wird, momentan sehe 
ich wohl den Wald vor lauter Baeumen nicht mehr.


Man kann jetzt als Argumente uebergeben:

1. die maximale Groesse in k der zu kopierenden Datei(en)

2. die minimale Groesse in k der zu kopierendenDatei(en)

3. die maximale Groesse in k der jeweiligen neuen Verzeichnisse

4. die Gesammtgroesse in k der zu kopierendenDatei(en)

5. die Anzahl der zu kopierenden Datei(en)

6. das Verzeichnis in dem die zu kopierenden Dateien sind

7. das Zielverzeichnis der zu kopierenden Dateien


###BEISPIEL

./files_to_catch_v1.2.sh 10 1 10 100 100 ~ TEST;

###


Ich habe es auch noch als tar.gz-Datei angehaengt.


###- BEGINN von files_to_catch_v1.2.sh-##############

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

        echo "
        "
        echo "files_to_catch_v1.2.sh - Copyrights 2003 by Thomas 
Ulrich 
Nockmann - tun@koeln-lug.de
        "
        echo "Usage: files_to_catch.sh <max sizes of files> <min 
sizes of 
files> <sizes of directories> <summary of filesizes> <number of 
files> <Path to find> <Path to copy to> ";
        echo "Example: ./files_to_catch_v1.2.sh 10 1 10 100 100 ~ 
TEST;"
        echo "Type './files_to_catch_v1.2.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";}'`;
        #OK=`echo $i | awk '/^[[:digit:]]+/&& !/.*[[:alpha:]]+.*/ 
{print 
"OK";}'`;
        #echo $i $OK $z
        if [ -z "${OK}" ];then
        #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 "
        "
                #FOUNDED_FILES=`find $6 -type f -size -${MAX_SIZE}k 
-a  -size 
+${MIN_SIZE}k -maxdepth 1`;
                FOUNDED_FILES=`find $6 -type f -size -${1}k -a  
-size +${2}k -name 
\[a-zA-Z0-9\]\* -maxdepth 1`;
        
        if [ -z "$FOUNDED_FILES"  ];then
                echo "No files are found";
                exit;
        else    
                z=0;
                if [ -d 1 ];then
                        rm -rf 1
                fi
                
                #mkdir $NEW_DIRECTORIES;
                ##mkdir 1;
                
                #if [ $? -eq 0 ];then 
                #       #cd 1;
                #       cd $NEW_DIRECTORIES;
                #else
                #       exit
                #fi
                #NEW_DIRECTORIES=2;
                

                if [ "${ADD_TO_NUMBER_OF_FILES_ALLOWED}" = "TRUE" ]; 
then
                        for i in $FOUNDED_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 $FOUNDED_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})) 
-gt $((${NUMBER_OF_FILES}))  ]; then
                                        #if [ $((${COUNT_FILES})) 
-gt $((${NUMBER_OF_FILES=`expr 
$NUMBER_OF_FILES - 1`}))  ]; then
                                        if [ $((${COUNT_FILES=`expr 
$COUNT_FILES - 1`})) -gt 
$((${NUMBER_OF_FILES}))  ]; then
                                                echo "GROESSER"
                                                echo $FOUNDED_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



###- ENDE von files_to_catch_v1.2.sh-#############################



\|||/
`@|@`thomas
  -






Attachment: files_to_catch_v1.2.tar.gz
Description: application/tgz


Reply to: