Skip to content

Instantly share code, notes, and snippets.

@dgreen
Last active October 20, 2018 22:53
Show Gist options
  • Save dgreen/dca02b0056edfe6df9697d7b99ab0ec9 to your computer and use it in GitHub Desktop.
Save dgreen/dca02b0056edfe6df9697d7b99ab0ec9 to your computer and use it in GitHub Desktop.
Unpack a Canvas Submission
#!/usr/bin/env perl -w
# File: unpack_canvas_submissions.pl
# Desc: unpack submissions.zip from Canvas
# Vers: 1.1 dgg 20181020 - update for Mac Mojave (and any changes due to recent Canvas updates)
# Vers: 1.0 dgg 20171129 - fixup syntax for High Sierra Perl and declare version 1.0
# Vers: 0.3 dgg 20171108 - move original submissions.zip to trash
# Vers: 0.2 dgg 20170910 - eliminate copy of submissions.zip
# Vers: 0.1 dgg 20160216 - original coding
#
# Limitation: Present version is tied to MacOS, Linux
# trash command which copies file to trash (on MacOS homebrew: brew install trash)
use File::Basename;
use File::Copy;
my $prog_name = basename $0;
if ( $#ARGV != 0 ) {
print "ARGV count = $#ARGV \n";
print "$prog_name: Canvas ZIP file must be supplied.\n";
exit 4;
}
my $canvas_zip_file = $ARGV[0];
if ( ! -e $canvas_zip_file ) {
print "$prog_name: File $canvas_zip_file does not exist.\n";
exit 4;
}
# Note: unlike Finder's unzip behavior no directory is necessarily made on unzipping
my ($submission_dir, $submission_path, $submission_ext) = fileparse($canvas_zip_file, (".zip"));
mkdir $submission_dir;
copy($canvas_zip_file, $submission_dir);
chdir $submission_dir;
`unzip $canvas_zip_file`;
unlink $canvas_zip_file;
# from http://stackoverflow.com/questions/1045792/how-can-i-list-all-of-the-files-in-a-directory-with-perl
#
opendir my $dir, '.' or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
# TBD skip over
foreach (@files) {
# print "File: $_\n";
my ($directory_name, $dirs, $ext) = fileparse($_, (".zip"));
# print " with extension = $ext\n";
if ($ext eq '.zip') {
mkdir $directory_name;
move($_,$directory_name);
chdir $directory_name;
# Folowing does not like spaces in filename
$zip_file = quotemeta $_;
`unzip $zip_file`;
# print "Unzipped $_ file\n";
unlink $_;
chdir '..';
}
}
chdir '..';
`trash $canvas_zip_file`;
print "Complete\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment