Zeile 1: |
Zeile 1: |
− | <pre>
| + | =Was= |
− | #!/bin/sh
| + | * Umsetzung von [[Rexxbot]] auf Linux |
| + | * Es wird ein Listing beliebiger Verzeichnisse in beliebiger Tiefe erstellt |
| + | * zu jeder Datei wird neben Dateidatum und -groesse auch MIME- und Datei-Typ gespeichert |
| + | * Archive werden temporär entpackt und ebenfalls indexiert |
| + | * ebenso Archive in Archiven in Archiven in Archiven [*n] |
| | | |
− | fkt_create_db () {
| + | =Archivtypen= |
− | DB="${WORKING_DIR}$(echo "$1" | md5sum -b | cut -d" " -f1).db"
| + | * ist-Zustand: |
| + | ** RAR, ZIP, TAR, GZIP, BZIP2, ISO, 7ZIP |
| + | * soll: |
| + | ** LHA, LZX, ARJ, gesplittete RARs |
| | | |
− | rm -f "$DB"
| + | =Systemanforderungen= |
− | sqlite "$DB" "create table n (id INTEGER PRIMARY KEY,deep INTEGER,size INTEGER,time INTEGER,fpat TEXT,fnam TEXT,type TEXT,mime TEXT,hash TEXT);"
| + | * Linux |
− | }
| + | * <tt>sqlite, 7zip</tt> |
| | | |
− | fkt_gen_index () {
| + | =Programmcode= |
− | echo "updating database \"$DB\" with index of \"$1\", deep = $DEEP"
| + | * zum download: http://141.54.160.24/bastian/freifunk/poormens_search.tgz |
− | | |
− | find "$1" -type f -printf "%s|%A@|%h|%f\n" |
| |
− | while read LINE; do
| |
− | let LINES+=1
| |
− | IFS="|"
| |
− | set $LINE
| |
− | | |
− | FPAT="$(echo "$3" | sed "s/'/''/g")"; test "$DEEP" -gt 0 && a=a
| |
− | FNAM="$(echo "$4" | sed "s/'/''/g")"
| |
− | TYPE="$(file -b "$3/$4" | sed "s/'/''/g")"
| |
− | MIME="$(file -ib "$3/$4")"
| |
− | HASH="$(md5sum -b "$3/$4" | cut -d" " -f1)"
| |
− | DATA="'$DEEP','$1','$2','$FPAT','$FNAM','$TYPE','$MIME','$HASH'" ; # echo "$DATA"
| |
− | | |
− | sqlite "$DB" "insert into n (deep,size,time,fpat,fnam,type,mime,hash) values ($DATA);"
| |
− | | |
− | if [ "$MIME" = "application/x-rar" ]; then
| |
− | let DEEP+=1
| |
− | mkdir "${WORKING_DIR}${HASH}/"
| |
− | echo "unRARing \""$FPAT/$FNAM"\""
| |
− | unrar -inul e "$FPAT/$FNAM" "${WORKING_DIR}${HASH}/"
| |
− | fkt_gen_index "${WORKING_DIR}${HASH}/"
| |
− | rm -fR "${WORKING_DIR}${HASH}/"
| |
− | let DEEP-=1
| |
− | elif [ "$MIME" = "application/x-zip" ]; then
| |
− | let DEEP+=1
| |
− | mkdir "${WORKING_DIR}${HASH}/"
| |
− | echo "unZIPing \"$FPAT/$FNAM\""
| |
− | unzip -qq "$FPAT/$FNAM" -d "${WORKING_DIR}${HASH}/"
| |
− | fkt_gen_index "${WORKING_DIR}${HASH}/"
| |
− | rm -fR "${WORKING_DIR}${HASH}/"
| |
− | let DEEP-=1
| |
− | fi
| |
− | done
| |
− | | |
− | echo "leaving directory \"$1\", deep = $DEEP"
| |
− | unset IFS
| |
− | }
| |
− | | |
− | if [ -z "$1" ] || [ -z "$2" ]; then
| |
− | echo "Usage: $0 /directory/to/crawl/ /working/dir/"
| |
− | else
| |
− | DEEP=0
| |
− | WORKING_DIR="$2"
| |
− | fkt_create_db "$1"
| |
− | fkt_gen_index "$1"
| |
− | fi
| |
− | </pre>
| |