2017-02-13 3 views
0

Ich habe die folgende Struktur:Bash: Finden und verketten Dateien

 
/home/ 
├── DIR1/ 
│ └── file_ab.csv 
├── DIR2/ 
│ └── file_cd.csv 
└── DIR3/ 
    └── file3_ef.csv 

Wo file_**.csv Reihen von Schwimmern enthalten, verschiedenen Schwimmer für jeden DIR.

Ich möchte den Inhalt aller file_**.csv Dateien greifen und verketten.

fand ich diese Antwort here:

find /home -type f -name '*.csv' -exec cat {} \; > pl_parameters 

Aber ich erhalte eine leere Datei 'pl_parameters' genannt. Warum ist die Datei leer? Wie kann ich das beheben?

+0

Warum nicht einfach 'cat /home/*/file1.csv> pl_parameters' verwenden –

+0

Ich habe eine modifizierte Version Ihres Vorschlags versucht:' cat /home/*/*.csv> pl_parameters', aber kein Glück. – StatsSorceress

Antwort

1
find /home/DIR* -name 'file*csv' |xargs cat > output.csv 

find /home/DIR* -name '*csv' gibt Ihnen die Dateien absolute Pfade.

xargs cat werden die Dateien iterieren und cat Druck der Dateien Inhalt

+0

Kann ich den pwd statt 'home' irgendwie benutzen? – StatsSorceress

+1

'find $ (pwd)/DIR * -name '* csv'' –

+0

Die letzte funktionierende Version, da ich nur eine csv-Datei pro Verzeichnis hatte, war: ' find $ (pwd)/RUN * -name' * csv '| xargs Katze> pl_paras_means.csv' – StatsSorceress

0

Mit Bash 4.0+ können Sie globstar verwenden und ein straight forward Befehl:

shopt -s globstar 
cd /home 
cat **/*.csv > pl_parameters 

**/ erweitert auf die gesamte Verzeichnisbaum unter dem aktuellen Verzeichnis.


Ihr Befehl:

find /home -type f -name '*.csv' -exec cat {} \; > pl_parameters 

mir gut aussieht - nicht sicher, warum Sie eine Null-Ausgabedatei bekam.

Verwandte Themen