将所有文件的内容以bash的顺序复制到一个文件中

时间:2014-06-10 19:15:52

标签: bash cat


我需要将文件夹中的所有文件合并到一个文件中 文件名为t1, t2, t3, ..., t1500,输出文件为“all”。
我在bash中使用了以下命令:cat t* >> all
但它结合了序列t1, t10, t11, ...而不是t1, t2, t3, ...的文件 请帮忙。

4 个答案:

答案 0 :(得分:4)

你可以尝试

cat t{1..1500} > all

如果您遇到任何涉及太长命令行的错误,可以尝试

for i in {1..1500}; do
  echo "t$i"
done | xargs -n 1500 cat

一种更长但可以说更具可读性的方法,可以在多次调用cat之间手动拆分列表:

{ cat t{1..100}
  cat t{101..500}    
  cat t{601..1000}
  cat t{1001..1500}
} > all

答案 1 :(得分:1)

矿:

find -maxdepth 1 -regextype posix-egrep -regex '.*t[[:digit:]]+$' | sort -V | xargs cat > all

或者

shopt -s extglob
printf "%s\n" t+([[:digit:]]) | sort -V | xargs cat > all

或者简单地(如果适用):

printf "%s\n" t* | sort -V | xargs cat > all

答案 2 :(得分:0)

尝试:

for i in {1..1500}; do cat t${i} >> all; done

在bash man-page

中阅读有关大括号扩展的更多信息

答案 3 :(得分:0)

我想如果你正在寻找序列t1 t10 t11那么

以下应该工作:

#!/bin/bash

for file in $(ls -1 t*)
do
  cat $file >> all
done
默认情况下,

ls按所需顺序列出。