我想将文件路径的白色列表转换为给定目录的黑色列表(最小长度(。
我有一个目录列表,我想保留所有子文件夹和文件。
我想将此信息倒置是获取的感觉:"带子文件夹的删除目录的最小数量"命令,以便结果将白名单的文件夹保持在内,包括子文件夹和文件。(只是为了解释。我不想删除任何东西。(
示例:数据结构:
/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}"