파일을 복사하고 전체 경로를 유지하세요.

파일을 복사하고 전체 경로를 유지하세요.

파일과 전체 경로를 대상 폴더에 복사해야 합니다. Linux(Red Hat/Centos)에서는 다음과 같이 쉽게 이 작업을 수행할 수 있습니다.

cp --parents /some/path/to/file /newdir

그런 다음 대상 디렉터리에 다음과 같은 내용이 표시됩니다.

/newdir/some/path/to/file

AIX 6.1에도 똑같은 기능이 필요합니다. 나는 몇 가지를 시도했지만 아직 성공하지 못했습니다. 작업을 수행하는 편리한 명령에 대한 아이디어가 있습니까?

답변1

cpAIX 용 기본 유틸리티--parent아시다시피 해당 옵션은 포함되어 있지 않습니다.

한 가지 옵션은 rsync를 설치하고 사용하는 것입니다.Linux 애플리케이션용 AIX 도구 상자소프트웨어 컬렉션. 또한 (rsync의 종속성으로) popt RPM을 설치해야 합니다.

그런 다음 다음을 실행할 수 있습니다.

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

AIX용 Gnu 툴킷인 AixTools를 설치할 수 있습니다. http://www.aixtools.net/index.php/coreutils

여기에는 cp와 여러분이 알고 사랑하는 다른 모든 도구가 포함됩니다.

답변3

2단계 프로세스로 대상 디렉터리가 먼저 생성된 다음(아직 존재하지 않는 경우) 파일이 복사됩니다(성공한 경우 mkdir).

dir=/some/path/to
mkdir -p "/newdir/$dir" && cp "$dir/file" "/newdir/$dir"

쉘 함수로서(단일 파일 복사만 처리):

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

관련 정보