我有一个包含数百个文件的目录(比如〜/ dir /)。其中一半将以字符串“ABC”开头,即它们将被称为ABC_0.csv,ABC_1.csv,ABC_2.csv等。
我的目标是编写一个shell脚本,它将获取每个“ABC”文件并将它们合并在一个更大的文件中,我称之为“master_ABC”。
我知道如何合并它们,但我不知道如何编写一个只接受名称以“ABC”开头的文件的shell脚本(注意:〜/ dir /中有其他文件,我没有兴趣并希望避免)。
此外,“ABC”文件的数量每天都会有所不同。
答案 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
需要通配符字符串。
我建议避免在这种情况下使用*
,因为它不适用于很长的文件列表,如果任何文件名包含空格字符,也会失败。