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にないすべてのフォルダが削除されるので、あなたの要件が危険に見えると思います(タイプミス、間違ったファイル形式/行末、または末尾のスペースを想像してください)。
では、シェル(スクリプト)でテキストファイルの処理が上手な友人3人を紹介します。
- 文字列演算(変数)
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