bash-command倒入文件路径的白上,以生成黑名单



我想将文件路径的白色列表转换为给定目录的黑色列表(最小长度(。

我有一个目录列表,我想保留所有子文件夹和文件。

我想将此信息倒置是获取的感觉:"带子文件夹的删除目录的最小数量"命令,以便结果将白名单的文件夹保持在内,包括子文件夹和文件。(只是为了解释。我不想删除任何东西。(

示例:数据结构:

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

fheTelist.txt

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

想要blacklist.txt

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

我想生成blacklist.txt

是否有一种简单的方法可以使用 bash命令进行操作?否则我想和python一起尝试。

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}"

最新更新