【问题标题】:Merge all files in a directory into one using bash使用 bash 将目录中的所有文件合并为一个
【发布时间】:2016-12-03 13:16:45
【问题描述】:

我有一个包含多个 *.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 或类似的?

【问题讨论】:

    标签: bash


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢,没想到答案这么简单。 cat 合并文件的顺序是什么?
    • @SilverLight - 与您给它们的顺序相同。由于*.js(在ls *.js中)按字母顺序返回它们,所以它们将与cat *.js连接。
    【解决方案2】:

    你也可以对传入的文件进行排序,默认是字母顺序,但是这个例子是按照文件修改时间戳从最旧到最新的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 2013-06-03
      • 1970-01-01
      • 2014-02-24
      • 2011-06-02
      • 2020-12-08
      • 2015-09-09
      相关资源
      最近更新 更多