summaryrefslogtreecommitdiff
path: root/src/extract-part1-files.bash
diff options
context:
space:
mode:
Diffstat (limited to 'src/extract-part1-files.bash')
-rwxr-xr-xsrc/extract-part1-files.bash39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/extract-part1-files.bash b/src/extract-part1-files.bash
new file mode 100755
index 0000000..9b8ff1b
--- /dev/null
+++ b/src/extract-part1-files.bash
@@ -0,0 +1,39 @@
1#!/bin/bash
2set -e
3set -o pipefail
4
5image=$1
6[ -e "$image" ]
7shift
8base_dir=$1
9[ "$base_dir" ]
10shift
11source_files=("$@")
12
13get_fsdev()
14{
15 read < <(kpartx -rav "$image")
16 set -- $REPLY
17 if [[ $* == 'add map '*' '* ]]
18 then
19 fsdev=/dev/mapper/$3
20 else
21 echo "Error: kpartx: $REPLY" >&2
22 exit 1
23 fi
24}
25
26cleanup()
27{
28 umount -v /mnt
29 dev=$(losetup -j "$image" -nO NAME)
30 [ "$dev" ] || exit 0
31 kpartx -d "$dev" || true
32 losetup -d "$dev" || true
33}
34
35get_fsdev
36mount -v -r "$fsdev" /mnt
37trap cleanup EXIT
38source_dir=/mnt/$base_dir
39cp -v --no-preserve=mode -t . -- "${source_files[@]/#/$source_dir/}"