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

21

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

js/
 |- 1.js
 |- 2.js
 |- blabla.js
我需要将此目录中的所有文件合并为一个merged_dmYHis.js。例如,如果文件内容如下:

1.js

aaa
bbb

2.js

的翻译是:

2.js

ccc
ddd
eee

blabla.js

fff

merged_280120111257.js将包含以下内容:

aaa
bbb
ccc
ddd
eee
fff

有没有办法使用bash来完成这个任务,或者这个任务需要像Python或类似的高级编程语言一样?

2个回答

68
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
非常感谢,我没想到答案如此简单。cat 命令合并文件的顺序是什么? - Silver Light
1
@SilverLight - 按照相同的顺序给出它们。就像 *.js(在 ls *.js 中)按字母顺序返回它们一样,它们将与 cat *.js 连接起来。 - eumiro

1
你可以对传入的文件进行排序, 默认按字母顺序排序,但是这个例子会根据文件修改时间戳从旧到新进行排序:
cat `ls -tr *.js` > merged_`date +%Y%m%d%H%M`.js

在这个例子中,cat从ls命令中获取文件列表,-t按时间戳排序,-r颠倒默认顺序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接