复制文件并保留完整路径

复制文件并保留完整路径

我需要将文件及其完整路径复制到目标文件夹。我可以在 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

相关内容