复制程序及其依赖的库文件到指定目录的脚本

老师布置的一个题目。脚本可同时接受多个需要拷贝的命令作为参数。

#!/bin/bash
PATH=${PATH:=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin}
#
TARGET=/mnt/sysroot
#
function cpfile ()
{
[ -f "${TARGET}$1" ] && echo "${TARGET}$1 already exist !" && return 1
SRCDIR="${1%/*}"
disDIR="${TARGET}$SRCDIR"
[ -d "$disDIR" ] || mkdir -p "$disDIR"
cp -Lp  "$1" "$TARGET$1"
#在$TARGET后添加$1是为了确保原文件是个链接文件时,跟踪链接文件并拷贝后名称和原文件相同
}
#
for i
do
type $i | grep "builtin" > /dev/null && ($i is builtin command; continue)
#检查命令是否为shell内置
FILE=$(which $i | grep -v "^alias" | grep -o "[^[:space:]]*")
cpfile $FILE
RETVAL=$?
[[ $RETVAL == 1 ]] && continue
#如果命令已经存在,如果已经复制过了.则其依赖的库文件就不用再复制了
for LIB in $(ldd "$FILE" | grep -o "[^[:space:]]*/lib[^[:space:]]*")
do
cpfile "$LIB"
done
done

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...