summaryrefslogtreecommitdiff
path: root/src/extract-part1-files.bash
blob: 9b8ff1bac412c0ad93025022a0c651fa7374976d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
set -e
set -o pipefail

image=$1
[ -e "$image" ]
shift
base_dir=$1
[ "$base_dir" ]
shift
source_files=("$@")

get_fsdev()
{
    read < <(kpartx -rav "$image")
    set -- $REPLY
    if [[ $* == 'add map '*' '* ]]
    then
        fsdev=/dev/mapper/$3
    else
        echo "Error: kpartx: $REPLY" >&2
        exit 1
    fi
}

cleanup()
{
    umount -v /mnt
    dev=$(losetup -j "$image" -nO NAME)
    [ "$dev" ] || exit 0
    kpartx -d "$dev" || true
    losetup -d "$dev" || true
}

get_fsdev
mount -v -r "$fsdev" /mnt
trap cleanup EXIT
source_dir=/mnt/$base_dir
cp -v --no-preserve=mode -t . -- "${source_files[@]/#/$source_dir/}"