
Ich möchte nur die Unterverzeichnisse behalten, die im entsprechenden Verzeichnis aus der CSV-Datei vorhanden sind. Die Dateistruktur sieht ungefähr so aus:
100_folder/
├── folder_11
├── folder_25
├── folder_31
└── folder_41
210_folder/
├── folder_13
├── folder_23
├── folder_31
└── folder_42
Informationen im CSV:
Col6,Col26
100,folder_11
100,folder_13
100,folder_41
210,folder_31
210,folder_42
Basierend auf den Informationen aus den Spalten möchte ich die Unterverzeichnisse entfernen, die in der CSV-Datei nicht vorhanden sind.
So lese ich die Datei:
eCollection=( $(cut -d ',' -f6,26 file.csv ) )
echo "${eCollection[@]}"
Antwort1
Natürlich können wir Ihnen eine Lösung bieten. Aber wo bleibt der Spaß?
Lassen Sie mich sagen, dass Ihre Anforderungen für mich gefährlich erscheinen, da jeder Ordner, der nicht in der CSV-Datei enthalten ist, gelöscht wird (stellen Sie sich Tippfehler, falsches Dateiformat/Zeilenende oder nachstehende Leerzeichen vor).
Vor diesem Hintergrund werde ich drei Freunde der Textdateiverarbeitung in der Shell (Skript) vorstellen.
- Stringmanipulation (von Variablen)
grep
Textsuche-Core-Util (Dateiinhalt, nur lesen)find
Dateisuche Core-Util (Dateiname)
Verwenden Sie niemals Code, den Sie nicht vollständig verstehen!
#!/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