2011-01-28 20 views
9

Tengo un directorio con varios archivos * .js. La cantidad y los nombres de los archivos son desconocidos. Algo como esto:Fusionar todos los archivos de un directorio en uno usando bash

js/ 
|- 1.js 
|- 2.js 
|- blabla.js 

necesito para combinar todos los archivos de este directorio en una merged_dmYHis.js. Por ejemplo, si contenido de los archivos son:

1.js

aaa 
bbb 

2.js

ccc 
ddd 
eee 

blabla.js

fff 

El merged_280120111257.js debería contener:

aaa 
bbb 
ccc 
ddd 
eee 
fff 

¿Hay una manera de hacerlo utilizando bash, o tal tarea requiere más alto nivel de lenguaje de programación, como Python o similar?

Respuesta

33
cat 1.js 2.js blabla.js > merged_280120111257.js 

solución general sería:

cat *.js > merged_`date +%d%m%Y%H%M`.js 

Solo por curiosidad - cree usted que es una buena idea para nombrar los archivos con DDMMYYYYHHMM? Puede ser difícil ordenar los archivos cronológicamente (dentro del caparazón). ¿Qué hay del patrón YYYYMMDDHHMM?

cat *.js > merged_`date +%Y%m%d%H%M`.js 
+0

Muchas gracias, no creo que la respuesta sea tan simple. ¿En qué orden 'cat' fusionar archivos? –

+0

@ SilverLight - en el mismo orden en que los das. Como '* .js' (en' ls * .js') los devuelve en orden alfabético, entonces se concatenarán con 'cat * .js'. – eumiro

-1

Puede ordenar los archivos entrantes, así, el valor predeterminado es el orden alfabético, pero este ejemplo va a través de la más antigua a la más reciente según la fecha y hora de modificación del archivo:

cat `ls -tr *.js` > merged_`date +%Y%m%d%H%M`.js 

En este ejemplo gato toma la lista de archivos del comando ls, y -t ordena por timestamp, y -r invierte el orden predeterminado.

Cuestiones relacionadas