39 lines
887 B
Bash
39 lines
887 B
Bash
|
#!/bin/sh
|
||
|
|
||
|
process_filespec() {
|
||
|
local src_dir="$1"
|
||
|
local dst_dir="$2"
|
||
|
local filespec="$3"
|
||
|
echo "$filespec" | (
|
||
|
IFS='|'
|
||
|
while read fop fspec fperm; do
|
||
|
local fop=`echo "$fop" | tr -d ' \t\n'`
|
||
|
if [ "$fop" = "+" ]; then
|
||
|
if [ ! -e "${src_dir}${fspec}" ]; then
|
||
|
echo "File not found '${src_dir}${fspec}'"
|
||
|
exit 1
|
||
|
fi
|
||
|
dpath=`dirname "$fspec"`
|
||
|
if [ -z "$fperm" ]; then
|
||
|
dperm=`stat -c "%a" ${src_dir}${dpath}`
|
||
|
fi
|
||
|
mkdir -p -m$dperm ${dst_dir}${dpath}
|
||
|
echo "copying: '$fspec'"
|
||
|
cp -fpR ${src_dir}${fspec} ${dst_dir}${dpath}/
|
||
|
if [ -n "$fperm" ]; then
|
||
|
chmod -R $fperm ${dst_dir}${fspec}
|
||
|
fi
|
||
|
elif [ "$fop" = "-" ]; then
|
||
|
echo "removing: '$fspec'"
|
||
|
rm -fR ${dst_dir}${fspec}
|
||
|
elif [ "$fop" = "=" ]; then
|
||
|
echo "setting permissions: '$fperm' on '$fspec'"
|
||
|
chmod -R $fperm ${dst_dir}${fspec}
|
||
|
fi
|
||
|
done
|
||
|
)
|
||
|
}
|
||
|
|
||
|
process_filespec "$1" "$2" "$3"
|
||
|
|