1
|
#!/bin/bash -e
|
2
|
. "$(dirname "${BASH_SOURCE[0]}")"/util.sh
|
3
|
|
4
|
if self_not_included; then
|
5
|
|
6
|
### zip
|
7
|
|
8
|
zip()
|
9
|
{
|
10
|
echo_func
|
11
|
cmd_log_fd=1 try self "$@" || ignore 12 #"zip has nothing to do" (`man zip`)
|
12
|
}
|
13
|
|
14
|
unzip()
|
15
|
{
|
16
|
echo_func
|
17
|
local piping="$(test "$1" = -p; exit2bool)"
|
18
|
|
19
|
cmd_log_fd="$(if test ! "$piping"; then echo 1; fi)" try self "$@"
|
20
|
# cmd_log_fd: don't filter stdout if piping extracted data to it
|
21
|
if test "$piping"; then ignore_e 1; fi # unzip exits 1 on SIGPIPE
|
22
|
end_try
|
23
|
}
|
24
|
|
25
|
zip_newer() { echo_func; set_inv force; zip ${no_force:+-u }"$@"; }
|
26
|
unzip_newer() { echo_func; set_inv force; unzip ${no_force:+-u }-o "$@"; }
|
27
|
# -o is safe because -u only extracts newer files
|
28
|
|
29
|
|
30
|
### compression of individual files
|
31
|
|
32
|
compress()
|
33
|
{
|
34
|
begin_target; : "${full_file:?}"; local zip_file="$full_file.zip"
|
35
|
stdout="$zip_file" to_file compress__zip_and_test
|
36
|
}
|
37
|
compress__zip_and_test()
|
38
|
{
|
39
|
zip -9 <"$full_file"
|
40
|
unzip -t "$zip_file" # only if newly created
|
41
|
}
|
42
|
|
43
|
expand()
|
44
|
{
|
45
|
begin_target; : "${full_file:?}"; local zip_file="$full_file.zip"
|
46
|
stdout="$full_file" to_file unzip <"$zip_file"
|
47
|
}
|
48
|
|
49
|
fi
|