1ファイルなら
# podman cp {コンテナ名}:コピー元フルパスのファイル名 コピー先ファイル名
で済む。2個でも済むけど、多い時はフォルダごと
# podman cp {コンテナ名}:コピー元フルパスのディレクトリィ名/ コピー元ディレクトリィ名
して後はtarコマンドでまとめれば普通はOK。
但し、コマンドを実行したユーザに所有者が変わってしまい後々面倒なことになるので、
できればコンテナの中でtarファイルにした方がいい。
# パラメータチェック
if [ $# -eq 3 ]; then
CONTER_NAME=$1
TARGET_DIR=$2
TARGET_TAR_PATH_NAME=$3
TARGET_TAR_NAME=$(echo $TARGET_TAR_PATH_NAME | rev | cut -d'/' -f1 | rev) ※ファイル名のみ取得
TMP_DIR="/tmp" ※都合悪い場合は書換え
CMD1="podman exec -it ${CONTER_NAME} /bin/bash -c 'cd ${TARGET_DIR}; ls -l; tar zcvf ${TMP_DIR}/${TARGET_TAR_NAME} . ; ls -l ${TMP_DIR}/${TARGET_TAR_NAME}'"
# cd ${TARGET_DIR}
# ls -l ※無くてもOK
# tar zcvf ${TMP_DIR}/${TARGET_TAR_NAME} .
# ls -l ${TMP_DIR}/${TARGET_TAR_NAME} ※無くてもOK
CMD2="podman cp ${CONTER_NAME}:${TMP_DIR}/${TARGET_TAR_NAME} $TARGET_TAR_PATH_NAME"
CMD3="podman exec -it ${CONTER_NAME} /bin/bash -c 'ls -l ${TMP_DIR}/${TARGET_TAR_NAME} ; rm -f ${TMP_DIR}/${TARGET_TAR_NAME} ; ls -l ${TMP_DIR}/${TARGET_TAR_NAME};'"
# ls -l ${TMP_DIR}/${TARGET_TAR_NAME} ※無くてもOK
# rm -f ${TMP_DIR}/${TARGET_TAR_NAME}
# ls -l ${TMP_DIR}/${TARGET_TAR_NAME} ※無くてもOK
CMD4="ls -l $TARGET_TAR_PATH_NAME"
echo CMD1:$CMD1
echo CMD2:$CMD2
echo CMD3:$CMD3
echo CMD4:$CMD4
/bin/bash -c "$CMD1" > log.txt
wait $! ※いい感じで待ってくれる
/bin/bash -c "$CMD2" >> log.txt
wait $! ※いい感じで待ってくれる
/bin/bash -c "$CMD3" >> log.txt
wait $! ※いい感じで待ってくれる
/bin/bash -c "$CMD4" >> log.txt
wait $! ※いい感じで待ってくれる
else
echo usage: $0 {PODMAN_CONTER_NAME} {FULL_PATH_IN_CONTER} {OUTPUT_TAR_FILE_NAME}
exit 1
fi
念のためTARGET_TAR_NAMEは、../conf.tar.gz とか保存先ディレクトリィを指定できる様にしてある。
余談
TARGET_TAR_NAMEが空っぽになるコード
TARGET_TAR_NAME= $(echo $TARGET_TAR_PATH_NAME | rev | cut -d'/' -f1 | rev)
$(・・・)の前に空白があると、TARGET_TAR_NAMEが空文字列になってしまう。
TARGET_TAR_NAME=$(echo $TARGET_TAR_PATH_NAME | rev | cut -d'/' -f1 | rev)
昔のUNIX(SystemV)の頃のawkも(…)や{…}の前後のスペーシングに敏感だったが今はそんな事ないんでウッカリしてた。