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