2011-09-28 25 views
6

Ho una directory contenente centinaia di file (ognuno con più caratteri). Voglio unirmi a loro in un singolo file con un separatore, "|".Unire tutti i file in una directory, con un separatore

ho cercato

find . -type f | (while read line; do; cat $line; echo "|"; done;) > output.txt 

Ma che ha creato un ciclo infinito.

risposta

9

È possibile escludere output.txt dall'uscita del find usando -not -name output.txt (o come già fatto notare nei commenti qui sotto, è sufficiente posizionare il file di output di fuori della directory di destinazione).

Ad esempio:

find . -type f -not -name output.txt -exec cat {} \; -exec echo "|" \; > output.txt 

Ho anche preso la libertà di sostituire la while/cat/echo con un paio di -exec params in modo che possiamo fare il tutto utilizzando un unico find chiamata.

+0

Ah, grazie per il puntatore. Questo ha funzionato per me 'trova. -tipo f | (mentre leggi riga; do; cat $ line; echo "|"; done;)> ../ output.txt' – Dogbert

+0

@Dogbert che funzionerebbe :). A proposito, non hai bisogno del punto e virgola dopo 'do' i.e.' (mentre leggi la riga; fai cat $ line; echo "|"; done;) ' –

+0

Sto imparando unix, quindi grazie anche per questo! – Dogbert

0

* Per rispondere il titolo della questione, dal momento che è la prima nei risultati di Google (il problema è in realtà output.txt correlato):

Questo è quello che uso per unire .jar file per eseguire Java app con i file in lib/:

EntityManagerStoreImpl

[email protected]:~/work/TOOLS/JawaBot/core$ ls 
catalog.xml nbactions.xml nb-configuration.xml pom.xml prepare.sh resources run.sh sql src target workdir 

[email protected]:~/work/TOOLS/JawaBot/core$ echo `ls -1` | sed 's/\W/:/g' 
catalog:xml:nbactions:xml:nb:configuration:xml:pom:xml:prepare:sh:resources:run:sh:sql:src:target:workdir 

l'elenco dei file può essere naturalmente sostituito con find ... o niente.
Il echo è lì per sostituire le nuove righe con spazi.

forma finale:

java -cp $(echo `ls -1 *.jar` | sed 's/\W/:/g') com.foo.Bar 
Problemi correlati