ファイルとフルパスをターゲットフォルダにコピーする必要があります。 Linux(Red Hat / Centos)では、次のように簡単にこれを行うことができます。
cp --parents /some/path/to/file /newdir
その後、ターゲットディレクトリに次の内容が表示されます。
/newdir/some/path/to/file
AIX 6.1にも同じ機能が必要です。私はいくつか試してみましたが、まだ成功していません。タスクを実行する便利なコマンドのアイデアはありますか?
答え1
cp
AIX 用の基本ユーティリティー--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