如何将所有文件递归复制到Ruby中的平面目录?

时间:2016-01-28 08:15:57

标签: ruby recursion filesystems

我想以递归方式遍历多个目录,并将所有文件复制到单个目录(非递归)。

基本上,复制:

dir1/subdir1/file1.txt
dir2/subdir1/file2.txt
dir3/subdir1/subsubdir2/file3.txt
dir4/subdir1/subsubdir2/file4.txt
dir5/subdir1/subsubdir2/subsubdir1/file5.txt


全部来:

dir6/file1.txt
dir6/file2.txt
dir6/file3.txt
dir6/file4.txt
dir6/file5.txt

据我所知,无论是使用方法,还是使用Dir.glob()构建文件名数组并迭代完毕,都无法做到这一点。

如果有办法在Bash中这样做,我很乐意知道。

3 个答案:

答案 0 :(得分:3)

红宝石:

target = 'dir6/'
%w|dir1 dir2 dir3|.each do |dir|
  Dir["#{dir}/**/*.txt"].each do |file|
    FileUtils.cp file, target
  end
end

答案 1 :(得分:1)

击:

for dir in dir1 dir2 dir3
do
  for i in `find "$dir" -type f`
  do
    cp "$i" dir6
  done
done

答案 2 :(得分:1)

您可以尝试这样的事情:

def traverse (from, to)
  Dir.chdir(from)
  files = Dir.glob('*').select { |fn| File.file?(fn)}
  FileUtils.cp files, to
  subdirs = Dir.glob('*/')
  subdirs.each do |subdir|
    traverse subdir, to
  end
  Dir.chdir('..')
end