ディレクトリ全体をコピーするインストールコマンドに問題があります。

ディレクトリ全体をコピーするインストールコマンドに問題があります。

だから私は私の内容のいくつかを含むリポジトリを持っています。構成ファイルmakefile私のホームディレクトリにインストールするために1つを作成しようとしています。私が経験している問題は、bashから直接次のコマンドを実行するときです。

install -m 755 -d ~/path/to/dotfilesDir/ ~/

何も起こらないと思います。

install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/

期待どおりに動作します。

最初の(よりシンプルでクリーンな)ソリューションが機能しないのはなぜですか?

答え1

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

答え2

一目でマニュアルページinstallあなたが望むことをしていないようです。

実際、要約セクションでは、次の形式の使用法を示します。

install [OPTION]... -d DIRECTORY...

後で、マニュアルページには次のように表示されます。

-d, --directory
すべての引数をディレクトリ名として処理し、指定したディレクトリのすべてのコンポーネントを作成します。

だから私の考えでは、このオプションの中心は複雑な(しかし空の)ディレクトリ構造をインストールできることですmkdir -p ...

ループを使用して必要なものを達成できます。

for file in /path/to/DotFiles/dir/*;do
    install -m 755 "$file" ~/
done

または、以下に複数のレベルがある場合は、次のものを/path/to/DotFiles/dir使用できますfind

find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +

答え3

srcフォルダとその中のファイルをdstにコピーしましたが、インストールが再帰フォルダのコピーをサポートしていないようです。

install -D src/* -t dst

関連情報