2014-02-02 5 views
2

Рассмотрим, мы следующую структуру каталогов:Архивирование каталог рекурсивно и пропустить каталог контейнера

Location: 
/Users/me/Desktop/directory_to_zip/ 
dir1 dir2 somefile.txt 

сейчас, если я использую rubyzip промелькнуть содержимое directory_to_zip, используя следующий код:

directory = '/Users/me/Desktop/directory_to_zip/' 
zipfile_name = '/Users/me/Desktop/recursive_directory.zip' 

Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| 
    Dir[File.join(directory, '**', '**')].each do |file| 
     zipfile.add(file.sub(directory, ''), file) 
    end 
end 

Это создаст zip-файл с именем recursive_directory.zip, который будет содержать каталог контейнера directory_to_zip & внутри directory_to_zip, найду ли я свои файлы (dir1 dir2 somefile.txt)

Как я пропустить создание directory_to_zip внутри recursive_directory.zip, так что почтовый файл содержит только содержимое directory_to_zip & не самого каталога.

ответ

2

Хорошо, я решил это самостоятельно. Если вы находитесь в одной лодке, вот здесь, как я это сделал

Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| 
     Dir.chdir directory 
     Dir.glob("**/*").reject {|fn| File.directory?(fn) }.each do |file| 
     puts "Adding #{file}" 
     zipfile.add(file.sub(directory + '/', ''), file) 
     end 
end 

Это работает именно так, как я хочу. здесь ограничение состоит в том, что оно не обрабатывает пустые каталоги. Надеюсь, это помогло бы кому-то

Смежные вопросы