2017-04-03 79 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