Wie verschieben Sie die Ordner basierend auf ihrer Übereinstimmung in der CSV-Datei in ein neues Verzeichnis?

292
beginner

In meinem aktuellen Verzeichnis habe ich viele Ordner wie F1, F2, F3, F4, F5, F6, F7, F8, F9, F10.

Ich habe eine csv-Datei "dan.csv" im aktuellen Verzeichnis, die eine Spalte mit Ordnernamen enthält.

Die CSV-Datei sieht wie folgt aus: Der Spaltenname lautet "id".

id F1 F4 F5 F6 F8 F10 

Aufgrund ihrer Übereinstimmung in der csv-Datei möchte ich die Ordner in ein neues Verzeichnis "DAN" verschieben.

Um dies zu tun, versuchte ich es wie folgt:

xargs -a <(tail -n +2 dan.csv) -I{} sh -c '[ -d "{}" ] && mv -t DAN "{}"' 

Dies hat keinen Fehler ausgelöst und auch die Ordner nicht in das neue Verzeichnis "DAN" verschoben.

1

1 Antwort auf die Frage

0
LukeLR

Eine einfache Bash- whileSchleife ist ausreichend:

IFS=";" while read othercolumn1 othercolumn2 ... id ... othercolumnx do mv $id DAN/ done < dan.csv 

Das liest jede Zeile aus der CSV-Datei, teilt die Zeile durch den Zeichensatz in der IFSVariablen auf und speichert jeden Wert dieser Zeile in den entsprechenden Variablen, die im Header der while-Schleife angegeben sind.

Stellen Sie sicher, dass die Kopfzeile der while-Schleife (in der alle Spalten aufgeführt sind) an die Kopfzeile Ihrer CSV-Datei angepasst wird. Sie benötigen die Werte der anderen Spalten wahrscheinlich nicht, aber es ist wichtig, sie trotzdem zu lesen, da sonst jeder Wert in der CSV als idWert behandelt würde . Wenn Ihre CSV-Datei durch etwas anderes getrennt ist ;, stellen Sie sicher, dass Sie das spezifische Zeichen IFS=vor der whileSchleife als -value festlegen .

Wenn Sie dan.csvvier Spalten hätten, in denen die ID die dritte ist, würden Sie dies folgendermaßen tun:

IFS=";" while read othercolumn1 othercolumn2 id othercolumn4 do mv $id DAN/ done < dan.csv 
In meiner CSV-Datei gibt es nur eine Spalte "ID" mit Ordnernamen. So funktioniert dieser Weg? während ID gelesen; do mv $ id DAN /; fertig <dan.csv beginner vor 6 Jahren 0
Ja, für den Fall, dass Sie nur eine Spalte haben, müssen Sie nur `während i lesen. tun ... ' LukeLR vor 6 Jahren 0
Ich habe einen Fehler wie diesen. mv: Fehlender Zieldateioperand nach 'DAN /' Versuchen Sie 'mv --help', um weitere Informationen zu erhalten. beginner vor 6 Jahren 0
Ersetzen Sie `mv $ id DAN /` durch `echo $ id` zu Testzwecken. Es sollten alle Ordnernamen gedruckt werden, die in der CSV-Datei ohne Leerzeilen dazwischen gespeichert sind. Wenn leere Zeilen vorhanden sind, schlägt 'mv' natürlich fehl, da mindestens zwei Operanden benötigt werden. LukeLR vor 6 Jahren 0
es druckt leere Zeilen beginner vor 6 Jahren 0