我需要将文件及其完整路径复制到目标文件夹。我可以在 Linux(Red Hat/Centos)上轻松做到这一点,如下所示:
cp --parents /some/path/to/file /newdir
然后我在目标目录中得到如下内容:
/newdir/some/path/to/file
我在 AIX 6.1 上需要完全相同的功能。我尝试了一些事情但还没有成功。有什么方便的命令来完成这项工作的想法吗?
答案1
AIX 的本机cp
实用程序--parent
正如您所发现的,不包括该选项。
一种选择是安装并使用 rsync适用于 Linux 应用程序的 AIX 工具箱软件集合。您还需要安装 popt RPM(作为 rsync 的依赖项)。
然后你可以运行:
rsync -R /some/path/to/file /newdir/
最终以/newdir/some/path/to/file
.
作为一个自行开发的选项,您可以使用 ksh93(用于数组支持)编写一个包装函数来模拟该行为。下面是一个简单的函数作为示例;它假设您要复制具有相对路径的文件,并且不支持任何选项:
relcp() {
typeset -a sources=()
[ "$#" -lt 2 ] && return 1
while [ "$#" -gt 1 ]
do
sources+=("$1")
shift
done
destination=$1
for s in "${sources[@]}"
do
if [ -d "$s" ]
then
printf "relcp: omitting directory '%s'\n" "$s"
continue
fi
sdir=$(dirname "$s")
if [ "$sdir" != "." ] && [ ! -d "$destination/$sdir" ]
then
mkdir -p "$destination/$sdir"
fi
cp "$s" "$destination/$sdir"
done
unset sources s sdir
}
答案2
您可以安装 AixTools,这是一个用于 AIX 的 gnu 工具包。 http://www.aixtools.net/index.php/coreutils
其中包括 cp 以及您了解和喜爱的所有其他工具。
答案3
作为一个两步过程,首先创建目标目录(如果它尚不存在),然后复制文件(如果成功mkdir
)。
dir=/some/path/to
mkdir -p "/newdir/$dir" && cp "$dir/file" "/newdir/$dir"
作为 shell 函数(仅处理复制单个文件):
cp_parents () {
source_pathname=$1
target_topdir=$2
mkdir -p "$target_topdir/${source_pathname%/*}" && cp "$source_pathname" "$target_topdir/$source_pathname"
}
然后,
$ cp_parents /some/path/to/file /newdir