Esempio:
File e directory da elaborare:
./
../
apache2/
Blogger: Roby's script - Modifica post_files/
Blogger: Roby's script - Modifica post.html
Comandi/
eclipse_sts_tooltip_color/
File di testo
info tipo filesystem.txt
mvn-archetype_generate.odt
Roby's blog_files/
Roby's blog.html
SpringBatch/
zipFileDistinti.sh.zipOutput dello script:
$ ./zipFileDistinti.sh Doc-Linux/
File: 6
zip di "./Blogger: Roby's script - Modifica post.html"
\-- con la dir: "Blogger: Roby's script - Modifica post_files"
zip di "./info tipo filesystem.txt"
zip di "./Roby's blog.html"
\-- con la dir: "Roby's blog_files"
zip di "./File di testo"
file "./zipFileDistinti.sh.zip"
\-- già compresso lo salto
zip di "./mvn-archetype_generate.odt"
Directory: 4
zip della dir: "./Comandi"
zip della dir: "./eclipse_sts_tooltip_color"
zip della dir: "./SpringBatch"
zip della dir: "./apache2"
Risultato:
./
../
apache2.zip
Blogger_Robys_script_-_Modifica_post.html.zip
Comandi.zip
eclipse_sts_tooltip_color.zip
File_di_testo.zip
info_tipo_filesystem.txt.zip
mvn-archetype_generate.odt.zip
Robys_blog.html.zip
SpringBatch.zip
zipFileDistinti.sh.zipNB1: Nello script sono riportati un bel pò di concetti...!
NB2: Naturalmente si poteva risolvere con diverse modalità, questo è il mio esempio a scopo didattico... (comunque funziona!).
zipFileDistinti.sh
#!/bin/bash
# aggiungere -x alla riga precedente per avviare in modalità debug
function testFileHtml {
dirColl=""
file=`echo $1 | sed 's/^\.\///'`
file "$file" | grep -q "HTML document"
if [ "$?" -eq "0" ]; then
file_name=$(basename "$file")
file_name_no_ext=${file_name%.*}
file_name_no_ext=$file_name_no_ext"_files"
grep -q "$file_name_no_ext" "$file"
if [ "$?" -ne "0" ]; then
file_name_no_ext20=$(python -c "import urllib; print urllib.quote('''$file_name_no_ext''')")
grep -q "$file_name_no_ext20" "$file"
fi
if [ "$?" -ne "0" ]; then
file_name_no_ext20=`echo $file_name_no_ext20 | sed 's/\%3A/:/g'`
grep -q "$file_name_no_ext20" "$file"
fi
if [ "$?" -eq "0" ]; then
dirColl=$file_name_no_ext
fi
fi
}
function nomeZip {
file=`echo $1 | sed 's/^\.\///'`
file=$(python -c "import string; valid_chars = '-_.() %s%s' % (string.ascii_letters, string.digits); print ''.join(c for c in '''$file''' if c in valid_chars)")
file=`echo $file | sed 's/[[:space:]]/_/g'`
fileZip="$file"
fileZipOrig=$fileZip
COUNTER=1
while [ -f "$fileZip.zip" ]; do
let COUNTER+=1
echo " \\-- \""$fileZip".zip\" esiste già: aggiungo suffisso \"$COUNTER\" al nome del nuovo zip..."
fileZip=$fileZipOrig"_""$COUNTER"
done
fileZip="$fileZip.zip"
}
if [ $# -ne 1 ]
then
echo "Uso: `basename $0` DIR"
exit 1
fi
dirWork="$1"
if [ ! -d "$dirWork" ]
then
echo "La directory: \"""$dirWork""\" non esiste!"
exit 1
fi
oldDir=`pwd`
cd "$dirWork"
ZIPCOMMANDSFILE="zip -m -T"
ZIPCOMMANDSDIR="zip -r -m -T"
unset arrayFile arrayDir i
while IFS= read -r -d $'\0' file; do
arrayFile[i++]="$file"
done < <(find . -maxdepth 1 -type f -print0)
unset i
while IFS= read -r -d $'\0' file; do
if [ "." != "$file" ]; then
arrayDir[i++]="$file"
fi
done < <(find . -maxdepth 1 -type d -print0)
totDir=${#arrayDir[*]}
echo "File: ${#arrayFile[*]}"
for ix in ${!arrayFile[*]}
do
fileArchivio=`echo "${arrayFile[ix]}" | sed -n '/.zip$/p'`
if [ ! -z "$fileArchivio" ]; then
echo "file \"$fileArchivio\""
echo " \\-- già compresso lo salto"
continue;
fi
#printf $ix" %s\n" "${arrayFile[$ix]}"
testFileHtml "${arrayFile[ix]}"
if [ "$dirColl" != "" ]; then
for iy in ${!arrayDir[*]}
do
#printf $iy" %s\n" "${arrayDir[$iy]}"
if [ "${arrayDir[$iy]}" == "./$dirColl" ]; then
arrayDir[$iy]=""
totDir=$((totDir - 1))
# Eventualmente per rimuovere l'elemento dall'array: arrayDir=(${arrayDir[@]:0:$iy} ${arrayDir[@]:$(($iy + 1))})
break;
fi
done
echo "zip di \"""${arrayFile[$ix]}""\""
echo " \\-- con la dir: \""$dirColl"\""
nomeZip "${arrayFile[$ix]}"
$ZIPCOMMANDSDIR "$fileZip" "${arrayFile[$ix]}" "$dirColl" 1>/dev/null
else
echo "zip di \"""${arrayFile[$ix]}""\""
nomeZip "${arrayFile[$ix]}"
$ZIPCOMMANDSFILE "$fileZip" "${arrayFile[$ix]}" 1>/dev/null
fi
done
echo
echo "Directory: ${totDir}"
for ix in ${!arrayDir[*]}
do
#printf $ix" %s\n" "${arrayDir[$ix]}"
if [ ! -z "${arrayDir[$ix]}" ]; then
echo "zip della dir: \"""${arrayDir[$ix]}""\""
nomeZip "${arrayDir[$ix]}"
$ZIPCOMMANDSDIR "$fileZip" "${arrayDir[$ix]}" 1>/dev/null
fi
done
echo
cd "$oldDir"
exit 0;