根据列中的匹配信息删除子目录

根据列中的匹配信息删除子目录

我只想保留 CSV 文件中相应目录中存在的子目录。文件结构看起来像这样:

100_folder/
├── folder_11
├── folder_25
├── folder_31
└── folder_41
210_folder/
├── folder_13
├── folder_23
├── folder_31
└── folder_42

CSV 中的信息:

Col6,Col26
100,folder_11
100,folder_13
100,folder_41
210,folder_31
210,folder_42

根据列中的信息,我想删除 CSV 文件中不存在的子目录。

这是我读取文件的方式:

eCollection=( $(cut -d ',' -f6,26 file.csv ) )
echo "${eCollection[@]}"

答案1

当然我们可以为您提供解决方案。但乐趣在哪里呢?

让我说你的要求对我来说看起来很危险,因为每个不在 csv 中的文件夹都将被删除(想象一下打字错误、错误的文件格式/行结尾或尾随空格)

那我就介绍一下shell(脚本)中文本文件处理的三位朋友

  • (变量的)字符串操作
  • grep文本搜索 core-util(文件内容,只读)
  • find文件搜索 core-util (文件名)

切勿使用您不完全理解的代码!

#!/bin/sh

csvfile='index.txt'
csvseparator=','

cut -d ',' -f6,26 file.csv > index.txt

for subdir in ./*/*/
  do
    subdir=${subdir%/}
    dir=${subdir%/*}
    parent=${dir%/*}
    subdir=${subdir##*/}
    dir=${dir##*/}
    if grep -Fxq "${dir%_*}$csvseparator$subdir" "$csvfile"
      then
        echo "ok: $parent/$dir/$subdir"
      elif grep -wq "^${dir%_*}" "$csvfile"
        then
          echo "no: $parent/$dir/$subdir"
#          find "$parent/$dir/$subdir" -delete
    fi
done

相关内容