aboutsummaryrefslogtreecommitdiff
path: root/bin/ak-sm-filesplitter
diff options
context:
space:
mode:
Diffstat (limited to 'bin/ak-sm-filesplitter')
-rwxr-xr-xbin/ak-sm-filesplitter136
1 files changed, 136 insertions, 0 deletions
diff --git a/bin/ak-sm-filesplitter b/bin/ak-sm-filesplitter
new file mode 100755
index 0000000..c675870
--- /dev/null
+++ b/bin/ak-sm-filesplitter
@@ -0,0 +1,136 @@
+#!/bin/bash
+#
+# The concept is simple
+#
+# 1. For a given file we split in 1MB files inside a temporary directory
+#
+# 2. We then create a map file, containing the resulted files and their sha512sum
+#
+# 3. We move the files to our $CHKDIR named after their checksums
+#
+# We ultimately want to be seeding the file so
+#
+# 4. We append the checksum of the original file with its name into the map file
+#
+# 5. We rename the map file after its checksum and move it to maps directory
+#
+# 6. We are done!
+#
+
+# Uncomment next line if you want to debug
+# set -xe
+PROGRAM="$(basename $0)"
+
+if [ ! -f "$1" ]
+then
+ echo "[ERROR] File not found"
+ exit 1
+else
+ FILE="$1"
+fi
+
+# The directory where the chunked data will be living at
+CHKDIR="$AK_WORKDIR/ftr/"
+# The directory for the map files so we can reconstruct the file
+FILEMAPSDIR="$AK_WORKDIR/fmp/"
+# A temporary root dir to work on
+TEMPORARYDIR="/tmp/tltmp"
+# A subdir to split the files there
+TECHDIR="/tmp/tltmp/chks/"
+# A pin point to return from where we came from
+CURRENTDIR="$(pwd)/"
+
+# Our snippet for logging debug info
+logit(){
+ ak-logthis "<$PROGRAM>" "$1" "$2"
+}
+
+# Checking directories and create them if necessary
+
+# TECHDIR
+if [ ! -d "$TECHDIR" ]
+then
+ mkdir -p "$TECHDIR"
+ if [ "$?" == 0 ]
+ then
+ logit "[INFO]" "Folder $TECHDIR created!"
+ else
+ logit "[ERROR]" "Problem occured while creating $TECHDIR"
+ echo "[ERROR] Can't create $TECHDIR"
+ exit 1
+ fi
+else
+ logit "[INFO]" "Temp dir found"
+fi
+
+# FILEMAPSDIR
+if [ ! -d "$FILEMAPSDIR" ]
+then
+ mkdir -p "$FILEMAPSDIR"
+ if [ "$?" == 0 ]
+ then
+ logit "[INFO]" "Folder $FILEMAPSDIR created!"
+ else
+ logit "[ERROR]" "Problem occured while creating $FILEMAPSDIR"
+ echo "[ERROR] Can't create $FILEMAPSDIR"
+ exit 1
+ fi
+else
+ logit "[INFO]" "Mapsdir found"
+fi
+
+# CHKDIR
+if [ ! -d "$CHKDIR" ]
+then
+ mkdir -p "$CHKDIR"
+ if [ "$?" == 0 ]
+ then
+ logit "[INFO]" "Folder $CHKDIR created!"
+ else
+ logit "[ERROR]" "Problem occured while creating $CHKDIR"
+ echo "[ERROR] Can't create $CHKDIR"
+ exit 1
+ fi
+else
+ logit "[INFO]" "Workdir found"
+fi
+
+# Uncomment next line in case you want to debug the resulting script as well
+# echo 'set -xe' > $TEMPORARYDIR/cmd_queue.sh
+
+# We get the SHA512 hash for the $FILE given
+CHECKSUM=$(sha512sum "$FILE"|awk '{print $1}')
+
+# We split the file into 1048576 bytes and output the chunks into TECHDIR
+split -b 1048576 --additional-suffix ".chk" -d "$FILE" "$TECHDIR$(basename "$FILE")-"
+
+# We go over there...
+cd $TECHDIR
+
+# We get every chunks' SHA512 and we craft a script to rename the chunks and
+# move them to CHKDIR
+sha512sum * > $TEMPORARYDIR/map; while IFS="" read -r p || [ -n "$p" ]
+do
+ echo $p | awk '{print "mv " $2 " '$CHKDIR'" $1}' >> $TEMPORARYDIR/cmd_queue.sh
+done < $TEMPORARYDIR/map
+
+# We run the crafted script
+sh $TEMPORARYDIR/cmd_queue.sh
+
+# and we delete it
+rm $TEMPORARYDIR/cmd_queue.sh
+
+# We inform the map about the original $FILE name and SHA512
+echo "$CHECKSUM $(basename "$FILE")" >> $TEMPORARYDIR/map
+
+# We get the SHA512 hash of the resulted map file
+MAPFILEHASH="$(sha512sum $TEMPORARYDIR/map | awk '{ print $1 }')"
+
+# and we rename it with it and move it to FILEMAPSDIR
+`sha512sum $TEMPORARYDIR/map | awk '{print "mv " $2 " '$FILEMAPSDIR'" $1}'`
+
+# We remove the TEMPORARYDIR
+rm -rf $TEMPORARYDIR
+
+# and print the MAPFILEHASH
+echo "$MAPFILEHASH"