7
votes

Copier des fichiers préservant la structure de répertoire avec râteau

Mon objectif est de copier un ensemble de fichiers spécifié par un modèle vers le dir cible. Les fichiers dans le répertoire source peuvent avoir des sous-diendants.

J'ai essayé: p> xxx pré>

et p> xxx pré> p> mais ni travailler. p>

Ça ne fonctionne que lorsque je fais quelque chose comme: p> xxx pré>

mais j'ai besoin de copier uniquement des fichiers * .html non rien d'autre. P> J'ai besoin de ce que p> xxx pré>

est p>

tout conseil à l'aide de méthodes Ruby / Rake existantes? P>

Mise à jour On dirait que la chose qui est plus facile à voir avec la fourmi, n'est pas possible avec Ruby / Rake Stack - Peut-être que je devrais regarder dans quelque chose d'autre. Je ne veux pas écrire le code personnalisé pour le faire fonctionner dans Ruby. Je pensais juste à Ruby / Rake en tant que solution appropriée pour cela. P>

Mise à jour 2 strong> Voici comment je le fais avec Ant P>

<target name="buildeweb" description="Builds web site" depends="clean">
    <mkdir dir="${build.dir.web}" />

    <copy todir="${build.dir.web}" verbose="true">
        <fileset dir="${source.dir.web}">
            <include name="**/*.html" />
            <include name="**/*.htm" />
        </fileset>
    </copy>

    <chmod perm="a+x">
        <fileset dir="${build.dir.web}">
            <include name="**/*.html" />
            <include name="**/*.htm" />
        </fileset>
    </chmod>
</target>


2 commentaires

Vous pouvez tout copier, puis supprimer ceux qui ne sont pas .html. Ce serait plus facile, car vous n'avez pas besoin de violer des chemins.


@ D11WTQ, ce n'est pas une bonne solution car dans ce cas, vous devez faire deux choses supplémentaires: copiez des fichiers inutiles, puis supprimez des fichiers inutiles.


3 Réponses :


3
votes

Je n'ai pas entendu parler de CP --Parents CODE>, mais si cela fait ce que vous voulez, il n'y a pas de honte à l'utiliser à partir de votre makefile, comme ceci:

system("cp --parents #{your} #{args}")


1 commentaires

Salut @david, merci de conseils. Je n'en ai pas entendu parler avant hier aussi :-) Je voudrais une solution plus propre qui n'a pas besoin d'appeler des commandes système, mais travaillez dans Pure Ruby, je pensais que cela pouvait être résolu dans Ruby - sinon je peux écrire Bash script à la place.



7
votes

Si vous voulez de PURE RUBY, vous pouvez le faire (avec un peu d'aide de FileTutils dans la bibliothèque standard).

require 'fileutils'

Dir.glob('**/*.html').each do |file|
  dir, filename = File.dirname(file), File.basename(file)
  dest = File.join(@target_dir, dir)
  FileUtils.mkdir_p(dest)
  FileUtils.copy_file(file, File.join(dest,filename))
end


1 commentaires

Salut @mark, je veux une solution de rubise pure, oui. Mais j'aimerais une approche déclarative plus propre. Je pensais qu'une telle automatisation est possible avec une pile Ruby / Rake sans écrire du code personnalisé. Je voudrais quelque chose de plus déclaratif comme: cp_r (, cible) sans qu'il soit nécessaire d'écrire des méthodes étranges. On dirait que c'est impossible avec std. Stack Ruby / Rake - et j'ai peut-être besoin de revenir à Bash ou à la fourmi.



0
votes

Cela pourrait être utile: xxx


0 commentaires