2011-09-28 18 views
6

Tengo un directorio que contiene cientos de archivos (cada uno con varios caracteres). Quiero unirlos en un único archivo con un separador, "|".Unir todos los archivos en un directorio, con un separador

me trataron

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

Pero eso crea un bucle infinito.

Respuesta

9

Puede excluir output.txt desde la salida del find usando -not -name output.txt (o como ya se ha señalado en los comentarios a continuación, sólo tiene que colocar el archivo de salida fuera del directorio de destino).

Por ejemplo:

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

También he tomado la libertad de reemplazar su while/cat/echo con un par de -exec params por lo que podemos hacer todo esto utilizando una sola find llamada.

+0

Ah, gracias por el puntero. Esto funcionó para mí 'find. -type f | (while read line; do; cat $ line; echo "|"; done;)> ../ output.txt' – Dogbert

+0

@Dogbert que funcionaría :). Por cierto, no necesitas el punto y coma después de 'do', es decir' (mientras lee la línea; do cat $ line; echo "|"; done;) ' –

+0

¡Estoy aprendiendo a usar unix, así que gracias por eso también! – Dogbert

0

* Para contestar el título de la cuestión, ya que es la primera vez en los resultados de Google (el problema es en realidad salida.txt no relacionado):

Esto es lo que uso para unirse a .jar archivos para ejecutar aplicaciones Java con archivos en 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 

La lista de archivos puede ser reemplazado por supuesto con find ... ni nada.
El echo está allí para reemplazar líneas nuevas con espacios.

forma final:

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