Bash
根據列中的匹配資訊刪除子目錄
我只想保留 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