45 lines
653 B
Bash
Executable File
45 lines
653 B
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ $# -lt 2 ]
|
|
then
|
|
echo "Usage: $0 from to"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" = "--hard" ]
|
|
then
|
|
LN="ln"
|
|
shift
|
|
elif [ "$1" = "--copy" ]
|
|
then
|
|
LN="cp"
|
|
shift
|
|
else
|
|
LN="ln -s"
|
|
fi
|
|
|
|
FROM=`realpath $1`; shift
|
|
TO=`realpath $1`; shift
|
|
|
|
if [ -z "$FROM" ] || [ -z "$TO" ]
|
|
then
|
|
echo "Usage: $0 from to"
|
|
exit 1
|
|
elif ! [ -d "$FROM" ]
|
|
then
|
|
echo "$FROM not found"
|
|
exit 2
|
|
fi
|
|
|
|
mkdir -p "$TO" || exit 3
|
|
rm -rf "$TO/*" || exit 3
|
|
|
|
for i in `find "$FROM" -mindepth 1 -type f`
|
|
do
|
|
FILE=`echo $i | sed "s!^$FROM/!!"`
|
|
HASH=`echo -n $FILE | sha384sum | cut -d " " -f 1`
|
|
|
|
mkdir -p "$TO/$HASH/"
|
|
$LN "$i" "$TO/$HASH/"
|
|
done
|