ファイルをコピーしてフルパスを維持します。

ファイルをコピーしてフルパスを維持します。

ファイルとフルパスをターゲットフォルダにコピーする必要があります。 Linux(Red Hat / Centos)では、次のように簡単にこれを行うことができます。

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

その後、ターゲットディレクトリに次の内容が表示されます。

/newdir/some/path/to/file

AIX 6.1にも同じ機能が必要です。私はいくつか試してみましたが、まだ成功していません。タスクを実行する便利なコマンドのアイデアはありますか?

答え1

cpAIX 用の基本ユーティリティー--parentご存知のように、そのオプションは含まれていません。

1つのオプションは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

関連情報