7

私の目標は、パターンで指定されたファイルのセットをターゲットディレクトリにコピーすることです。ソースディレクトリ内のファイルはサブディレクトリを持つことができます。

私は試した:

cp_r(Dir.glob('**/*.html'), @target_dir):

cp_r(FileList['**/*.html'], @target_dir):

しかし、どちらも機能しません。

それは私が次のようなことをしたときにのみ機能します:

cp_r(Dir['.'], @target_dir):

ただし、*。htmlファイルのみをコピーする必要があります。他には何もコピーする必要はありません。

私は何が必要です

cp --parents

コマンドは行います

既存のRuby/Rakeメソッドを使用したアドバイスはありますか?

UPDATE Antで行うのが簡単なように見えますが、Ruby/Rakeスタックでは不可能です-何か他のものを調べる必要があるかもしれません。Rubyで動作させるためのカスタムコードを書きたくありません。そのための適切なソリューションとしてRuby/Rakeについて考えました。

UPDATE2これは私がAntでそれを行う方法です

<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>
4

3 に答える 3

7

純粋なRubyが必要な場合は、これを行うことができます(標準ライブラリのFileUtilsの助けを借りて)。

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
于 2012-10-01T00:05:31.240 に答える
3

私は聞いたことがありませんcp --parentsが、それがあなたが望むことをするなら、次のようにあなたのRakefileからそれを使うだけで恥はありません:

system("cp --parents #{your} #{args}")
于 2012-09-30T23:49:01.720 に答える
0

これは便利かもしれません:

# copy "files" to "dest" with any sub-folders after "src_root". 
def copy_and_preserve files, dest, src_root
  files.each {|f|
    f.slice! src_root # the files without src_root dir
    dest_dir = File.dirname(File.join(dest, f))
    FileUtils.mkdir_p dest_dir # make dest dir
    FileUtils.cp(File.join(src_root, f), dest_dir, {:verbose => true})
  }
end
于 2013-07-04T02:16:46.870 に答える