2017-10-26 1 views
1

Ich habe eine Textdatei aufgeführt die Verzeichnisnamen und welche Dateien sollten darin enthalten sein.Linux Verzeichnisse erstellen und entsprechende Dateien in die Verzeichnisse verschieben

my text file: 
SRS000111 ERR1045156  
SRS000112 ERR1045188  
SRS00ERR1045204  
SRS000134 ERR1045237 ERR1045238 ERR1045239 
SRS000154 ERR1045255 ERR1045256 
SRS000168 ERR1045260 ERR1045261 ERR1045262 
...   ...   ... 
SRS001567 ERR1547451 ERR1547676 

Jetzt möchte ich alle Verzeichnisse mit der ersten Spalte der Textdatei erstellen, aber ich weiß nicht, wie die for-Schleife zu tun.

for filename in cat file.txt | awk -F, '{print $1}'; do mkdir ${filename}; done 

aber es geht um Fehler.

Sekunde Ich habe alle ERR-Dateien und ich möchte sie in die entsprechenden Verzeichnisse gemäß der Textdatei verschieben. Ich habe keine Ahnung, wie ich diesen Teil machen soll.

+0

Was ist das Trennzeichen zwischen der Spalte in jeder Zeile? –

+0

@ Karthikeyan.R.S Registerkarte –

Antwort

1

Sie haben für mkdir und mv Dateien

Diese awk system Anrufe von awk machen

tun würde
awk 'FNR>1{system("mkdir \"" $1 "\""); for(i=2; i<=NF; i++) system("mv \"" $i "\" " "\"" $1 "\"")}' file 

FNR>1, weil wir für die erste Zeile dh Header-Namen nicht Verzeichnis erstellen möchten in Ihrer CSV-Datei

Hinweis: Führen Sie diesen Befehl aus dem Verzeichnis, in dem alle Dateinamen wie in erwähnt Ihre Quell-/Eingabedatei ist vorhanden. Dadurch werden Verzeichnisse dort selbst erstellt und alle Dateien in diesen neu erstellten Verzeichnissen verschoben.

+0

MV: umbenennen ERR1045156 zu SRS000111/ERR1045156: Keine solche Datei oder Verzeichnis –

+0

@PeterChung: Sie führen nicht den Befehl von wo die Datei 'ERR1045156' platziert wird. 'cd' in das' Verzeichnis' wo alle Ihre Dateien abgelegt werden und dann diesen Befehl ausführen, wie ich in meiner ursprünglichen Antwort erwähnt habe. – batMan

1

Ich empfehle Ihnen, lesen Sie die Datei, teilen Sie den Ordner Namen Spalten und Dateinamen Spalten und macht de Verzeichnisse und die Bewegungen.

Dieses Skript macht es:

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    dir=$(echo "$line" | awk '{print $1}') 
    files=$(echo "$line" | awk '{$1=""; print $0}') 

    mkdir $dir 
    mv $files $dir/ 
done < myfile.txt 

Ist das nicht zu kompliziert, aber wenn Sie Fragen zu diesem Thema haben, können Sie mir jede Frage stellen

Verwandte Themen