フルパスでファイルを宛先フォルダーにコピーする必要があります。 Linux(Red Hat/Centos)では、次のように簡単に実行できます。
cp --parents /some/path/to/file /newdir
次に、宛先ディレクトリで次のようなものを取得します。
/newdir/some/path/to/file
AIX6.1でもまったく同じ機能が必要です。私はいくつかのことを試みましたが、まだ成功しませんでした。仕事をするための便利なコマンドのアイデアはありますか?
AIXのネイティブcp
ユーティリティ ご存知のとおり、--parent
オプションは含まれていません。
1つのオプションは、 AIX Toolbox for Linux Applications ソフトウェアコレクションからrsyncをインストールして使用することです。また、(rsyncの依存関係として)poptRPMをインストールする必要があります。
次に、実行できます。
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
}
AIX用のgnuツールキットであるAixToolsをインストールできます。 http://www.aixtools.net/index.php/coreutils
これには、あなたが知っていて大好きな他のすべてのツールの中でcpが含まれています。
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