Как выполнить рекурсивную распаковку с терминала? [дубликат]

Внутри zip-архива у меня есть еще один zip-файл

Я хочу, чтобы команда распаковывала все сразу.

1
задан 1 March 2018 в 18:05

1 ответ

Я предлагаю создать пользовательскую команду, добавив следующую функцию в .bashrc:

# Recursive UNZIP 
# - covers only the firs level of the recursion; 
# - works only with one input file
unzipr () {
    # Get the users input
    TARGET_ZIP_FILE="${1}"

    # Get the list of sub archive zip files
    ZIP_LIST="$(unzip -l "$TARGET_ZIP_FILE" | awk 'NR > 1 && $NF ~ /zip/ { print $NF }')"

    # Output the list of sub archive zip files
    if [ ! -z "${ZIP_LIST}" ]; then
        echo 'List of Sub Archives:'
        for ZIP in $ZIP_LIST; do echo -e " - $ZIP"; done; echo
    else
        echo "Sub Archives Not Found."
    fi

    # Extract and unzip the files
    for ZIP in $ZIP_LIST; do
        # Ask the user for his/her preferences
        echo -n "Do you want to extract and unzip \"$ZIP\" [Y|n]: "
        read preference

        # Extract the file according to the users preferences
        if [ -z "${preference}" ] || [[ "${preference}" =~ ^(y|Y).* ]]; then
            unzip "$TARGET_ZIP_FILE" "$ZIP"
            unzip "$ZIP"
            rm "$ZIP"
            echo
        fi
    done
}

Добавьте эти строки в конец ~/.bashrc, затем выполните source ~/.bashrc, и вы есть команда под названием unzipr. Вот как это работает:

enter image description here

2
ответ дан 7 December 2019 в 13:26

Другие вопросы по тегам:

Похожие вопросы: