2017-04-03 28 views
0

我有一個目錄充滿了csv文件,並且在運行時我將生成一些中間的csv文件。我只想遍歷原始文件,而不是在運行時生成的文件。與原有的以「2017年」開始,所以我的線沿線的思考的東西:shell腳本循環通過一些文件的方向

for FILE in "$data_dir"2017*_"$i".csv; 

其中$我來自通過潛在的字符串在這個文件名的數組迭代。然而,即使我想結果是:

20170301_file1.csv 20170301_file2.csv 20170301_file3.csv 20170302_file1.csv

等,一個echo$FILE回報:

2017*_file1.csv 
2017*_file2.csv 
2017*_file3.csv 

我不知道如何更改我的2017*部分的聲明。

+0

似乎最簡單的事情就是使用單獨的目錄。 –

回答

1

正確的語法是如下......

for File in "${data_dir}2017*_${i}.csv" 
do 
# some commands... 
done 

你只需要引用孔文件和bash將處理通配符*, 我還添加了花括號{ }擺脫分隔的變量其餘的部分。

+1

老實說,我不明白這是如何工作的OP的問題,例如_我想只遍歷原始文件_ - 但他接受了它 - 所以......我不能理解所有的東西。 ;) – jm666

+0

也許我不清楚:我擔心的是我不希望迭代器檢查我在運行時創建的中間文件(在suleiman的答案的#some命令部分發生了什麼),但堅持原始的,以「2017」開頭的那些。這種方法做我想要的。 – nvergos

+0

@suleiman:爲什麼引用包括通配符在內的整個表達式可以解決問題?我期望的是相反的。例如,如果我在「$ HOME」/ *'中爲'f做了'f,循環體對於我的HOME中的每個非隱藏條目都會調用一次,但是當我在「$ HOME/*」' ,循環體僅被調用一次,因爲引號禁止擴展glob字符。 – user1934428