2011-01-28 13 views
9

Mam katalog z kilkoma plikami * .js. Ilość i nazwy plików są nieznane. Coś takiego:Scal wszystkie pliki w katalogu w jeden przy pomocy basha

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

muszę połączyć wszystkie pliki w tym katalogu do jednego merged_dmYHis.js. Na przykład, jeśli pliki zawartość:

1.js

aaa 
bbb 

2.js

ccc 
ddd 
eee 

blabla.js

fff 

merged_280120111257.js będzie zawierać:

aaa 
bbb 
ccc 
ddd 
eee 
fff 

Czy istnieje sposób, aby zrobić to za pomocą bash, czy takie zadanie wymaga języka programowania wyższego poziomu, jak pyton lub podobne?

Odpowiedz

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

ogólnym rozwiązaniem byłoby:

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

prostu z odsetek - myślisz, że to jest dobry pomysł, aby wymienić tylko pliki z DDMMYYYYHHMM? Sortowanie plików może być trudne chronologicznie (w powłoce). Co powiesz na wzór YYYYMMDDHHMM?

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

Dziękuję bardzo, nie sądziłem, że odpowiedź jest tak prosta. W jakiej kolejności pliki "cat" łączą się? –

+0

@SilverLight - w tej samej kolejności, w jakiej je podajesz. Ponieważ '* .js' (w' ls * .js') zwraca je w kolejności alfabetycznej, więc będą łączone z 'cat * .js'. – eumiro

-1

można sortować przychodzących plików, jak również, domyślnie jest w porządku alfabetycznym, ale ten przykład przechodzi od najstarszych do najnowszych poprzez modyfikację pliku datownika:

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

W tym przykładzie kota trwa listę plików z polecenia ls i -t sortuje według znacznika czasu, -r odwraca domyślną kolejność.

Powiązane problemy