J'ai donc un dépôt avec certains de mes fichiers de configuration et j'essaie de créer un makefile
pour les installer dans le homedir. Le problème que j'ai est que lorsque j'exécute la commande suivante directement dans bash
install -m 755 -d ~/path/to/dotfilesDir/ ~/
apparemment rien ne se passe
install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/
fonctionne comme prévu.
Pourquoi la première solution (plus simple et plus propre) ne fonctionne-t-elle pas?
Réponses:
En regardant la page de manuel , il semble que
install
cela ne fera pas ce que vous voulez.En effet, la section Synopsis indique une utilisation du formulaire:
et plus tard, la page de manuel dit:
Il me semble donc que l'intérêt de cette option est de pouvoir installer une structure de répertoire compliquée (mais vide) à la
mkdir -p ...
.Vous pouvez accomplir ce que vous voulez avec une boucle:
Ou, s'il y a plusieurs niveaux sous
/path/to/DotFiles/dir
, vous pouvez utiliserfind
:la source
install -m 755 -d ~/foo/bar/baz
-exec 'install -m 755 "{}" ~/' +
ne va pas fonctionner, du moins pas sur certaines (toutes? la plupart?) versions de linux. Peut fonctionner sur OSX ou quelque chose. Utiliser quelque chose comme ça est assez simple si vous voulez un oneliner: 1. créer des répertoires récursifs:for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done
2. créer des fichiers récursifs:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
À partir de la réponse de @Joseph R., voici ma solution pour le faire fonctionner avec find, car je ne pouvais pas faire fonctionner sa commande. (Je ne pense pas que ce soit le cas, en raison des règles qui s'appliquent à
\+
: il ne peut rien y avoir après l'{}
élément.) (Je ne pouvais pas commenter. Tout ce paragraphe peut en fait être supprimé.)Pour copier tous les fichiers dans le même répertoire exact (ici
target/directory
):-D
n'est pas obligatoire ici, il créera simplement les répertoires inexistants sur la cible.Pour copier toute une hiérarchie de répertoires et ses fichiers (cela supprimera les répertoires vides) à partir de l'endroit où vous vous trouvez actuellement:
Comme dit, cela va recréer l'arbre à partir de
$PWD
. En outre, si vous avez besoin de copier le répertoire vide, sur pourrait trouver un moyen utilisant le-type d
defind
etinstall -d
.Donc, pour copier l'arborescence, à partir d'un répertoire qui n'est pas
$PWD
:Remarquez comment
parent/directory
n'est pas copié.Supplémentaire
Pour ceux qui utilisent
shell/fish
, voici la ligne qui fait de même:la source