bash-команда для инвертирования белого списка путей к файлам для генерации черного списка



Я хочу преобразовать белый список путей к файлам в черный список (минимальная длина) путей к файлам для данного каталога.



У меня есть список каталогов, который я хочу сохранить со всеми вложенными папками и файлами в нем.

Я хочу инвертировать эту информацию-это смысл получения: минимальное количество команд "удалить каталог с вложенными папками", так что результатом будет сохранение папок белого списка, включая вложенные папки и файлы. (Просто чтобы объяснить. Я не хочу удалять что-нибудь. )



Пример:
структура данных:



/A1/
A2/
B2/
A3
B3
C2/
/B1/
A2/
A3
B2
/C1/
A2
B2
/D1


Белый список.txt



/A1/B2  # also keep subdirs!
/C1/B2


Разыскивается черный список.txt



/A1/A2
/A1/C2
/B1 # no subdirs in whitelist -> no individual items here!
/C1/A2
/D1


Я хочу создать черный список.txt



Есть ли простой способ сделать это с помощью командbash ?
В противном случае я хотел бы попробовать его с python.
637   1  

1 ответ:

Версия сценария bash

whitelist=( "./A1/B2" "./C1/B2" )

function run_path {
    local cpath cdir wdir allb bdirs
    cpath=${1:-.}
    cpath=${cpath%/}

    for wdir in "${whitelist[@]}"; do
        if [[ $wdir = $cpath ]]; then
            # break the recursive call
            # exit_status <>0 => false
            return 1
        fi
    done

    allb=1
    bdirs=()
    for cdir in "$cpath"/*/; do
        if [[ -d $cdir ]]; then
            # exit_status <>0 => false : found whitelist item
            if ! run_path "$cdir"; then
                allb=0
            else
                bdirs+=("$cdir")
            fi
        fi
    done

    if [[ $allb = 0 ]]; then
        for cdir in "${bdirs[@]}"; do
            echo "$cdir"
        done
        return 1
    fi

}

run_path "${cur_path}"

Comments

    Ничего не найдено.