2011-01-28 15 views
9

Ho una directory con diversi file * .js. La quantità e i nomi dei file sono sconosciuti. Qualcosa di simile a questo:Unisci tutti i file in una directory in uno usando bash

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

ho bisogno di unire tutti i file in questa directory in un unico merged_dmYHis.js. Ad esempio, se i file contenuti sono:

1.js

aaa 
bbb 

2.js

ccc 
ddd 
eee 

blabla.js

fff 

Il merged_280120111257.js sarebbe contengono:

aaa 
bbb 
ccc 
ddd 
eee 
fff 

C'è un modo per farlo utilizzando bash, o tale compito richiede più elevato livello di linguaggio di programmazione, come il pitone o simili?

risposta

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

soluzione generale sarebbe:

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

solo per interesse - pensi che sia una buona idea di nominare i file con DDMMYYYYHHMM? Potrebbe essere difficile ordinare i file in ordine cronologico (all'interno della shell). E il modello YYYYMMDDHHMM?

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

Grazie mille, non pensavo che la risposta fosse così semplice. In quale ordine 'cat' unisce i file? –

+0

@ Silverlight - nello stesso ordine in cui li date. Poiché '* .js' (in' ls * .js') li restituisce in ordine alfabetico, quindi saranno concatenati con 'cat * .js'. – eumiro

-1

È possibile ordinare i file in arrivo, così, il valore predefinito è l'ordine alfabetico, ma questo esempio passa attraverso dal più vecchio al più recente da parte del timestamp di modifica del file:

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

In questo esempio gatto prende l'elenco di file dal comando ls e -t ordina per timestamp e -r inverte l'ordine predefinito.

Problemi correlati