だから私はいくつかの config files を含むリポジトリを持っているので、makefile
を作成してホームディレクトリにインストールしようとしています。私が持っている問題は、bashで次のコマンドを直接実行すると
install -m 755 -d ~/path/to/dotfilesDir/ ~/
一見何も起こらない
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
意図したとおりに機能します。
最初の(より簡単でよりクリーンな)ソリューションが機能しないのはなぜですか?
man page を見ると、install
は期待どおりに動作しないようです。
実際、「概要」セクションは次の形式の使用法を示しています。
install [OPTION]... -d DIRECTORY...
その後、manページには次のように書かれています。
-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 "{}" ~/' +
@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
から始まるツリーを再作成します。また、空のディレクトリをコピーする必要がある場合、onはfind
および-type d
の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/{}" \\;'