使用bash将目录中的所有文件合并为一个

时间:2011-01-28 10:59:26

标签: bash

我有一个包含多个* .js文件的目录。数量和文件名称未知。像这样:

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

我需要将此目录中的所有文件合并为一个merged_dmYHis.js。例如,如果文件内容是:

1.js

aaa
bbb

2.js

ccc
ddd
eee

blabla.js

fff

merged_280120111257.js将包含:

aaa
bbb
ccc
ddd
eee
fff

有没有办法用bash来做,或者这样的任务需要更高级的编程语言,比如python或类似的?

2 个答案:

答案 0 :(得分:46)

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

一般解决方案是:

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

只是出于兴趣 - 您认为用DDMMYYYYHHMM命名文件是个好主意吗?可能很难按时间顺序(在shell中)对文件进行排序。 YYYYMMDDHHMM模式怎么样?

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

答案 1 :(得分:-1)

您也可以对传入的文件进行排序,默认为按字母顺序排列,但此示例通过文件修改时间戳从最旧到最新进行:

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

在此示例中,cat从ls命令获取文件列表,-t按时间戳排序,-r反转默认顺序。