Unterverzeichnisse basierend auf übereinstimmenden Informationen aus der Spalte löschen

Unterverzeichnisse basierend auf übereinstimmenden Informationen aus der Spalte löschen

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)
  • grepTextsuche-Core-Util (Dateiinhalt, nur lesen)
  • findDateisuche 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

verwandte Informationen