Bash

根據列中的匹配資訊刪除子目錄

  • October 22, 2021

我只想保留 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[@]}"

我們當然可以為您提供解決方案。但樂趣在哪裡?

讓我說您的要求對我來說看起來很危險,因為不在 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

引用自:https://unix.stackexchange.com/questions/674281