105 lines
2.1 KiB
Bash
105 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# input parameters :
|
|
# $1 path to source directory
|
|
# $2 path to destination directory
|
|
# $3 optional list of files
|
|
|
|
|
|
# this script will:
|
|
# if provided two first parameters:
|
|
# create in dest directory same drectory tree as in src directory
|
|
# for each *./h/c/s file in src directory tree
|
|
# if provided 3 parameters
|
|
# create for each file from the list link in destination directory to file from src directory
|
|
# in both cases
|
|
# if link to src file not exists new link will be created
|
|
# if link exists will compare file time stamps and update link time
|
|
# stamp in case that file was modified after link creation time
|
|
|
|
# uncomment for debug
|
|
#set -x
|
|
|
|
#list of src directories
|
|
dir_list=
|
|
|
|
#src and dest path
|
|
src_path=$1
|
|
dest_path=$2
|
|
DIR_ARGS=2
|
|
args=("$@")
|
|
|
|
[ -z "$LN_FORCE" ] && LN_FORCE=true
|
|
#will fill dir_list
|
|
get_dir_list()
|
|
{
|
|
cd $src_path
|
|
dir_list=`du|awk '{print $2}' | sed -e 's/.\///' |grep -v "\."`
|
|
}
|
|
|
|
#check and create link for file ($1 - file name)
|
|
check_create_link()
|
|
{
|
|
file=$1
|
|
|
|
if [ ! -e $dest_path/$file ]
|
|
then
|
|
mkdir -p $dest_path
|
|
echo " LN $file->$dest_path/$file"
|
|
[ "$LN_FORCE" == true ] && LN_PARAM="-snf" || LN_PARAM="-s"
|
|
ln $LN_PARAM $src_path/$file $dest_path/$file
|
|
else
|
|
src_file_time=`stat -c %Y $src_path/$file`
|
|
link_file_time=`stat -c %Y $dest_path/$file`
|
|
[ $src_file_time -gt $link_file_time ] && echo "LN UPDATE $file->$dest_path/$file" ; unlink $dest_path/$file; ln -s $src_path/$file $dest_path/$file
|
|
fi
|
|
}
|
|
|
|
#create links for directory tree
|
|
make_dir_links()
|
|
{
|
|
#get src dir list
|
|
get_dir_list
|
|
|
|
#create dest dir tree
|
|
cd $dest_path
|
|
for i in $dir_list
|
|
do
|
|
mkdir -p $i
|
|
done
|
|
|
|
#create/update links
|
|
cd $src_path
|
|
for i in `find . -name "*.[chsS]" -print`
|
|
do
|
|
check_create_link $i
|
|
done
|
|
}
|
|
|
|
#create links for file list
|
|
make_file_links()
|
|
{
|
|
#for all files in file list
|
|
for ((i=2; i < $#; i++)) {
|
|
#create link for file from file list (bash array)
|
|
check_create_link ${args[$i]}
|
|
}
|
|
}
|
|
|
|
main()
|
|
{
|
|
#if provided 3 parameters create links for file list
|
|
if [ $# -gt $DIR_ARGS ]
|
|
then
|
|
make_file_links $@
|
|
#create links for directory tree
|
|
else
|
|
make_dir_links $@
|
|
fi
|
|
|
|
}
|
|
|
|
main $@
|
|
|
|
|