find
いくつかのディレクトリを選択してファイルを別の場所にコピーするコマンドがあります(私が--parents
望むのは、コマンドによって出力されたディレクトリが内容find
なしでコピーされることです(ただし、所有権とモードは同じでなければなりません)。
ファイルを使用または制限できますが、find
必要に応じてデフォルトの所有権とモードを使用してディレクトリが作成されます。オプションを使用すると、ディレクトリが正しい所有権とモードだけでなく、すべてのファイルとともにコピーされます。デフォルトでは、リストのディレクトリはその内容ではなく、ディレクトリメタデータのみをコピーしたいと思います。-type f
! -type d
-r
cp
この目標を達成する方法は?
答え1
私の考えの最も簡単なツールです。ディレクトリが与えられたときに繰り返さないというオプションがpax
あるからです。-d
そのため、ディレクトリのみをコピーするには、ディレクトリがコピーされたことを確認できるように手順に従ってください。ファイルをコピーしないでください。次のタスクも実行できます。
find somewhere -type d | pax -wd > archive.tar
tar vtf archive.tar
( cd somewhere_else && tar xpf - ) < archive.tar
満足すれば、アーカイブコンテンツの中間印刷(tar vxf archive.tar)を削除し、中間archive.tarファイルをパイプに置き換えることができます。
答え2
GNUがあれば、find
おそらく次のようになります。
find path/to/dir -type d -printf '%P\0' |
rsync -0av --files-from=- path/to/dir/ path/to/newdir/
あなたがしたいことをします(-0av
に置き換えてテストしてください-0avn
)。
rsync
検索基準に基づいてディレクトリ構造全体をコピーするなど、適切なフィルタを個別に使用できます。
rsync -avn -f'+ */' -f'- *' path/to/dir/ path/to/newdir/