Shell脚本:使用基于文件名部分的文件

时间:2014-09-26 12:18:01

标签: shell

我有一个包含数百个文件的目录(比如〜/ dir /)。其中一半将以字符串“ABC”开头,即它们将被称为ABC_0.csv,ABC_1.csv,ABC_2.csv等。

我的目标是编写一个shell脚本,它将获取每个“ABC”文件并将它们合并在一个更大的文件中,我称之为“master_ABC”。

我知道如何合并它们,但我不知道如何编写一个只接受名称以“ABC”开头的文件的shell脚本(注意:〜/ dir /中有其他文件,我没有兴趣并希望避免)。

此外,“ABC”文件的数量每天都会有所不同。

4 个答案:

答案 0 :(得分:2)

使用通配符*扩展来获取不同的文件ABC_1.csv,依此类推

cat ABC_*.csv > master_ABC.csv

答案 1 :(得分:1)

您可以捕获列表中的所有文件,然后使用追加(>>)来捕获主文件

files=`ls ABC*csv`

 for f in $files
 do
   echo $f
   cat $f >> master_ABC.csv
 done

答案 2 :(得分:1)

您可以使用通配符*。

#!/bin/bash

cat ~/dir/ABC*csv > master_ABC

答案 3 :(得分:1)

ls循环中使用find(或grep)与while

ls | grep 'ABC_.*\.csv$' | while read fn ; do cat $fn >> master_ABC.csv ; done

find(特别是如果你需要递归遍历子目录):

find . -type f -name 'ABC*.csv' | while read fn ; do cat $fn >> master_ABC.csv ; done

请注意,grep接受正则表达式,而find需要通配符字符串。

我建议避免在这种情况下使用*,因为它不适用于很长的文件列表,如果任何文件名包含空格字符,也会失败。