2014-09-26 78 views
0

我有一個包含幾百個文件的目錄(比如〜/ dir /)。其中一半將以字符串「ABC」開始,即它們將被稱爲ABC_0.csv,ABC_1.csv,ABC_2.csv等等。Shell腳本:使用基於部分文件名的文件

我的目標是編寫一個shell腳本,它將採用這些「 ABC「文件並將它們合併到一個更大的文件中,我稱之爲」master_ABC「。我知道如何合併它們,但我不知道如何編寫一個shell腳本,它只會將名稱以「ABC」開頭的文件(注意:在〜/ dir /中還有其他文件沒有興趣和想避免)。

此外,「ABC」文件的數量每天都會有所不同。

回答

1

你可以捕捉列表中的所有文件,然後用追加(>>)貓主文件

files=`ls ABC*csv` 

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

使用通配符*擴張來獲得等不同的文件ABC_1.csv

cat ABC_*.csv > master_ABC.csv

1

您可以爲此使用通配符*。

#!/bin/bash 

cat ~/dir/ABC*csv > master_ABC 
1

使用ls(或find)與grepwhile循環:

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需要一個通配符字符串。

我建議在這種情況下避免使用*,因爲它不適用於非常長的文件列表,並且如果任何文件名包含空格字符也將失敗。