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.
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