Unpack makes it possible to unarchive rar and zip files using ruby.
You pass a directory and it will find all your archive files, unpack and remove them (if you want to).
sudo gem install unpack
Start irb
and include the gem, require 'unpack'
$ Unpack.runner!
=> [#<Container:0x000001010ab458 @files=["dmd-tsa-cd2.avi"], @directory="/Downloads/Some.Super.Movie/CD2">]
$ Unpack.runner!('/some/dir')
=> [#<Container:0x000001010ab458 @files=["some_files.mov"], @directory="/some/dir">]
$ Unpack.runner!('.', remove: true)
=> [#<Container:0x000001010ab458 @files=["dmd-tsa-cd2.avi"], @directory="/Downloads/Some.Super.Movie/CD2">]
$ Unpack.runner!('.', remove: true)
=> []
$ Unpack.runner!('.', remove: true, force_remove: true)
=> []
$ Unpack.runner!('.', depth: 3)
=> [#<Container:0x000001010ab458 @files=["dmd-tsa-cd2.avi"], @directory="/Downloads/Some.Super.Movie/CD2">]
To prevent you from unarchive files in folders that contains subtitles and other nonrelevant files, the folder must contain 5 archive files or more.
If you want to unpack everything, even subtitles directories, then you will have to specify the min_files
option.
$ Unpack.runner!('.', min_files: 0)
=> [#<Container:0x000001010ab458 @files=["english.str"], @directory="/Downloads/Subtitle/">]
$ Unpack.it!(file: 'zip/my_file.zip')
=> [#<Container:0x000001010ab458 @files=["file1", "file2"], @directory="/Downloads/my/files/zip">]
$ Unpack.it!(file: 'zip/my_file.zip', remove: true)
=> [#<Container:0x000001010ab458 @files=["file1", "file2"], @directory="/Downloads/my/files/zip">]
$ Unpack.it!(file: 'zip/my_file.zip', to: '/tmp')
=> [#<Container:0x000001010ab458 @files=["file1", "file2"], @directory="/tmp">]
- ** :min_files ** (Integer) The minimum amount of files in the directory you want to archive the files in. Default is 5.
- ** :depth ** (Integer) The maximum folder depth. Default is 2.
- ** :debugger ** (Boolean) Prints some debug output into the console. Default is false.
- ** :force_remove ** (Boolean) Remove rarfiles, even if no files where unarchived. Default is false. To get this to work you also have to set the
remove
option to true. - ** :remove ** (Boolean) Removes archived files after they have been used. Default is false.
- ** :absolute_path_to_unrar ** (String) The absolut path to the unrar binary. Default is the unrar binary that comes with the gem.
- :to (String) The absolute or relative path to the destination directory. If nothing is defined, the :file path will be used.
- :file (String) The absolute or relative path to the archive file.
- :remove (Boolean) See the runner! method above
- :absolute_path_to_unrar (String) See the runner! method above
- :debugger (String) See the runner! method above
The runner!
method returns an Array
of Container
instances.
The it!
method returns an instance of Container
.
These are the accessors of the Container
class.
- files (String) The absolut path to the files that where unarchived.
- directory (String) The absolut path to the folder containing the files.
- Start by copying the project or make your own branch.
- Navigate to the root path of the project and run
bundle
. - Start by running all tests using rspec,
autotest
. - Implement your own code, write some tests, commit and do a pull request.
The gem is tested in OS X 10.6.6 using Ruby 1.9.2 and 1.8.7.
- the UnRarX team that provies the unrar binary.
- NinoScript that solved the console-escaping issue - see this commit.