如何将所有文件递归复制到 Ruby 中的平面目录?
How do I copy all files recursively to a flat directory in Ruby?
我想递归地遍历几个目录,然后将所有文件复制到一个目录(非递归)。
基本上,复制:
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 有办法做到这一点,我会很高兴知道。
bash:
for dir in dir1 dir2 dir3
do
for i in `find "$dir" -type f`
do
cp "$i" dir6
done
done
您可以尝试这样的操作:
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
ruby:
target = 'dir6/'
%w|dir1 dir2 dir3|.each do |dir|
Dir["#{dir}/**/*.txt"].each do |file|
FileUtils.cp file, target
end
end
我想递归地遍历几个目录,然后将所有文件复制到一个目录(非递归)。
基本上,复制:
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 有办法做到这一点,我会很高兴知道。
bash:
for dir in dir1 dir2 dir3
do
for i in `find "$dir" -type f`
do
cp "$i" dir6
done
done
您可以尝试这样的操作:
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
ruby:
target = 'dir6/'
%w|dir1 dir2 dir3|.each do |dir|
Dir["#{dir}/**/*.txt"].each do |file|
FileUtils.cp file, target
end
end