@Joseph R.の答えから始めて、これはfindで動作させるための私のソリューションです。彼のコマンドを動作させることができませんでした。(ルールが適用されるため、そうなるとは思わない\+:{}要素の後には何もない。)(コメントできなかった。この段落全体を実際に削除できる。)
すべてのファイルをまったく同じディレクトリ(ここtarget/directory)にコピーするには:
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D ここでは必須ではなく、ターゲットに存在しないディレクトリを作成するだけです。
現在の場所からディレクトリ階層全体とそのファイルをコピーするには(空のディレクトリは省略されます):
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
前述のように、これはから始まるツリーを再作成します$PWD。また、空のディレクトリをコピーする必要がある場合は、-type dof findおよびを使用する方法を見つけることができますinstall -d。
したがって、ツリーをコピーするには、次のディレクトリではないディレクトリから開始します$PWD。
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
parent/directoryコピーされないことに注意してください。
追加
を使用shell/fishしている場合、同じことを行う行があります:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'