parent
aa3326e000
commit
98f6e01dee
1 changed files with 83 additions and 0 deletions
@ -0,0 +1,83 @@ |
||||
#!/bin/zsh -e |
||||
# (c) 2015 Taeyeon Mori |
||||
|
||||
source "$DOTFILES/lib/libzsh-utils.zsh" |
||||
|
||||
function usage { |
||||
echo "Usage: $1 [--help] [--notest] [7z options] <archive...> [destination]" |
||||
echo "unpack_shift (c) 2015 Taeyeon Mori" |
||||
echo |
||||
echo "Simple tool to unpack SHIFT-JIS encoded archives onto UTF-8 filesystems" |
||||
echo "Requires p7zip (the 7z command) and convmv to be available" |
||||
echo |
||||
echo "Positional Arguments:" |
||||
echo " archive The archive file (can be given multiple times)" |
||||
echo " destination The destination directory to unpack into" |
||||
echo |
||||
echo "Options:" |
||||
echo " --help Show this help message and exit" |
||||
echo " --test Do a test-run" |
||||
echo " -* Pass any other options to 7z" |
||||
exit $2 |
||||
} |
||||
|
||||
args=() |
||||
sevenzip_args=() |
||||
convmv_args=(-f shift-jis -t utf8) |
||||
test_run=false |
||||
|
||||
for cx in "$@"; do |
||||
case "$cx" in |
||||
--help) |
||||
usage "$0" 0;; |
||||
--test) |
||||
test_run=true;; |
||||
-*) |
||||
sevenzip_args+=("$cx");; |
||||
*) |
||||
args+=("$cx");; |
||||
esac |
||||
done |
||||
|
||||
last_arg_ix=$[${#args}] # NOTE: ZSH Arrays start at 1! |
||||
if [ $last_arg_ix -ge 1 ]; then |
||||
destination="${args[$last_arg_ix]}" |
||||
if [ ! -f "$destination" ]; then |
||||
args[$last_arg_ix]=() |
||||
else |
||||
destination="`pwd`" |
||||
fi |
||||
fi |
||||
|
||||
if [ -z "$args" ]; then |
||||
usage "$0" 1 |
||||
fi |
||||
|
||||
$test_run || \ |
||||
convmv_args+=("--notest") |
||||
|
||||
destination="`realpath "$destination"`" |
||||
|
||||
# Make temp dir to not impact other files |
||||
if [ -d "$destination" ]; then |
||||
tmp="`mktemp -dp "$destination" .unpack_shift_XXXX`" |
||||
else |
||||
tmp="`mktemp --tmpdir -d unpack_shift_XXXX`" |
||||
fi |
||||
cd "$tmp" |
||||
|
||||
msg "Unpacking Archive(s)..." |
||||
for archive in "${args[@]}"; do |
||||
msg " Unpacking $archive" |
||||
LANG=ja_JP 7z x "${sevenzip_args[@]}" "$archive" |
||||
done |
||||
|
||||
msg "Fixing Filename encodings..." |
||||
convmv "${convmv_args[@]}" -r * |
||||
|
||||
# Clean up temporary dir |
||||
$test_run || \ |
||||
mv * "$destination" |
||||
cd "$destination" |
||||
rm -rf "$tmp" |
||||
|
Loading…
Reference in new issue