
我只想保留 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