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