2013-04-15 36 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