2017-01-11 53 views
0

我在其中包含許多文件中像目錄:如何從使用正則表達式的路徑中找到文件名?

IF_OCS0003STS20170109144902.csv 
IF_OCS0005STS20170109151234.csv 
IF_OCS0007STS20170109171408.csv 

上述文件包含name_date_time.csv格式。我試圖通過檢查文件是否存在或不是一個一個地存儲每個文件。

下面的代碼片段是隻有一個文件,檢查樣本,但它不工作:

#!/bin/bash 

FILE_OCS0003STS= "$(basename ./cdr/IF_OCS0003STS`date -d "yesterday" '+%Y%m%d'`*.csv)"; 

if [ -e "./cdr/$FILE_OCS0003STS" ]; 
then 
    echo "File $FILE_OCS0003STS exist." 
else 
    echo "File $FILE_OCS0003STS does not exist" >&2 
fi 
+3

你實際上沒有說過問題是什麼。 「根本不工作」不是對問題的有用描述。你從這些echo聲明中得到了什麼輸出?這是一個理智的文件路徑嗎?如果是這樣,文件是否真的存在? –

+1

一個評論 - 在作業中你不能在'='周圍有空格; 'foo = bar'不會將'bar'分配給'foo',它會在環境中將'foo'設置爲空變量作爲命令運行'bar'。 –

+0

@CharlesDuffy,注意謝謝。 – soewin

回答

1

我沒有合適的外殼在這裏測試此,但它可能是值得嘗試這種:

DATESTRING=`date -d 'yesterday' '+%Y%m%d'` 
FILE_OCS0003STS=`ls ./cdr/ | grep $DATESTRING` 

也許應該使用find而不是ls但我一定要得到的語法錯誤沒有合適的外殼爲測試它,並沒有使用bash的多的很長一段時間。類似於

FILE_OCS0003STS=$(basename `find ./cdr/ -name "$DATESTRING*"`) 
+0

我試過你的代碼並得到輸出 - > IF_OCS0003STS20170110 * .csv 但我想要IF_OCS0003STS20170110151234.csv。謝謝。 – soewin

+0

是的,這個工作,ls ./cdr/ | grep IF_OCS0003STS'date -d「yesterday」'+%Y%m%d''*。謝謝。 – soewin

+0

不客氣。在技​​術上使用'find'在技術上更正確(根據某些人),而不是使用'ls'來處理這種事情,所以我也將這個選項添加到了我的答案中。儘管如此,未經測試。 –

相關問題