@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 d
of 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/{}" \\;'