cpioを使用してディレクトリを再帰的にコピーする方法は?

cpioを使用してディレクトリを再帰的にコピーする方法は?

リストのディレクトリを再帰的にコピーする方法はmy-files-to-copy.txt

cd my/source/dir
cpio --create < my-files-to-copy.txt | (cd my/dest/dir && cpio --extract)
コピーしたいファイル.txt
src/main.js
src/routes/index.js
src/my-app/ # a directory with it's own child tree I want to recursively copy

ベストアンサー1

cpioリストファイルを「前処理」する方法でディレクトリパス名を検出し、それを繰り返してその下のすべてのファイルのパス名を抽出する追加のスクリプトを実行しない限り、実際にこれを行う方法はありません。

次のような他のツールを使用する方がはるかに簡単です(rsync後で追加情報を参照してください!)。-r--files-from

rsync -a --files-from=my-files-to-copy.txt -r my/source/dir my/dest/dir

...またはpax標準ユーティリティ):

( cd my/source/dir && pax -w ) <my-files-to-copy.txt |
( cd my/dest/dir   && pax -r )

...またはpaxターゲットディレクトリの絶対パスを提供できる場合:

( cd my/source/dir && pax -rw /my/dest/dir ) <my-files-to-copy.txt

...またはBSD tar(GNUを使用-Tまたは--files-from=置換):-Itar

tar -c -f - -C my/source/dir -I my-files-to-copy.txt |
tar -x -f - -C my/dest/dir

これらすべてがmy-files-to-copy.txt現在のディレクトリにあると仮定し、そのディレクトリはそのディレクトリとは異なる場合がありますmy/source/dir

おすすめ記事