2013-04-15 37 views
2

我需要访问我的shell脚本中的两个文件。唯一的问题是,我不确定文件名是什么,因为它是系统生成的。文件名的一部分总是不变的,但其余部分是系统生成的,因此可能会有所不同。我不知道如何访问这些文件?检索bash/shell编程的文件名

示例文件名

1型

MyFile1.yyyy-mm-dd_xx:yy:zz.log

在这种情况下,我知道MyFile1部分是所有的文件不变,其他部分变化的基础上的日期和时间。我可以使用date +%Y-%m-%d直到MyFile1.yyyy-mm-dd_,但我不知道如何选择正确的文件。请注意每天只有一个这样的文件。在unix下面的命令给我正确的文件。

unix> ls MyFile1.yyyy-mm-dd*

2型

MyFile2.yyyymmddxxyyxx.RandomText.SomeNumber.txt

在这个文件中,你可以看到Myfile2部分是共同的,我可以用户Date +%Y%m%d得到直至(当前日期)MyFile2.yyyymmdd,又不非常清楚如何继续从那里。unix下面的命令给了我正确的文件。我还需要在文件2的dd列有以前的日期。

unix> ls MyFile2.yyyymmdd*

在我的shell脚本

#!/bin/ksh 
timeA=$(date +%Y-%m-%d) 
timeB=$(date +%Y%m) 
sysD=$(date +%d) 
sysD=$((sysD-1)) 
filename1=($Home/folder/MyFile1.$timeA*) 
filename2=($Home/folder/MyFile2.$timeB$sysD*) 

只是不知道如何让RHS这两个文件基本上是寻找以下行。

运行上面的脚本后的结果如下

Script.ksh[8]: syntax error at line 8 : `(' unexpected 
+0

@StevenPenny我simplu找'文件= MyFile1.yyyy毫米dd_xx:YY:zz.log'在shell脚本。如何获得RHS是我的问题。让我知道,如果你正在寻找任何进一步的细节 – misguided

回答

2

也许这

$ file=(MyFile1.yyyy-mm-dd*) 

$ echo $file 
MyFile1.yyyy-mm-dd_xx:yy:zz.log 

应当注意的是,你必须以这种方式

foo=123 

不声明变量

012仔细

通知,坏

filename1=$($HOME/folder/MyFile1.$timeA*) 

filename1=($HOME/folder/MyFile1.$timeA*) 
+0

@misguided:@ StevenPenny的方法应该工作。听起来像你(仍然)在变量名和'='符号之间有空格。另外请注意,赋值的结果实际上是一个* array *;访问它没有索引会给你第一个元素。最后:如果没有匹配的文件,该数组仍然有1个元素:未扩展的匹配模式(带有“*”通配符的字符串)。因此,用'[[-f $ filename1]]'测试这个值来检测这种情况。 – mklement0

+0

干杯队友。它适用于bash。我与Bash合作。 – misguided