2017-05-04 10 views
2

ファイルパスのホワイトリストを、特定のディレクトリのファイルパスのブラックリスト(最小長)に変換します。ファイルリストのホワイトリストを反転してブラックリストを生成するbash-command

私はすべてのサブフォルダとファイルを保存したいディレクトリのリストを持っています。

私はこの情報を得る意味があります:サブフォルダとファイルを含むホワイトリストのフォルダを保持するように、「サブフォルダを持つディレクトリを削除する」コマンドの最小数。 (ただ、説明すると、私は何も削除する必要はありません。。)

例: データ構造:

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

がblacklist.txt

を望んでいたwhitelist.txt
/A1/ 
     A2/ 
     B2/ 
       A3 
       B3 
     C2/ 
/B1/ 
     A2/ 
       A3 
     B2 
/C1/ 
     A2 
     B2 
/D1 

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

blacklist.txtを生成したい

簡単な方法はありますかbashコマンド? それ以外の場合は、Pythonで試してみたいと思います。

+0

は私が正しく質問を理解していれば、あなたは単に 'prune'オプションで' find'を使用することができます。 – 123

答えて

0

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

絶対に素晴らしいです。あなたの仕事と時間のために、ありがとう! – Tobias

関連する問題