2016-11-21 127 views
0

我一直在操縱tar文件,我想測試文件是否存在提取它測試文件中tar歸檔

比方說,我有一個名爲archive.tar中的tar文件,並在進入

tar -tvf Archive.Tar 

我得到:

-rwxrwxrwx guy/root   1502 2013-10-02 20:43 Directory/File 
-rwxrwxrwx guy/root   494 2013-10-02 20:43 Dir/SubDir/Text 
drwxrwxrwx guy/root    0 2013-10-02 20:43 Directory 

我想提取文本到我的工作目錄,但我想,以確保它實際上是通過這樣一個文件:

if [ -f Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

這個測試的結果總是KO,我真的不明白爲什麼,有什麼建議?

+0

你如何測試這個「之前提取」?也就是說,如果你沒有提取任何東西,什麼是「Dir/Sub/Text」?目前還不清楚你的確切步驟是什麼。 – kaylum

+0

在我正在寫的腳本中,我必須測試說'Dir/Sub/Text'是一個文件,然後用'tar -xvf Archive.tar Dir/Sub/Text'提取它,對不起,因爲沒有足夠明確 – AlexT

+0

我知道這就是你必須做的。但是,自從'-f'測試路徑以後,你如何期望你顯示的腳本能夠工作?你不能測試一個不存在的路徑(因爲你沒有提取它)。 – kaylum

回答

-1

這可能是一個解決方案,

tar -tvf Archive.Tar | grep Dir/Sub/Text 

這將讓你知道,如果找到該文件。

+0

這是如何告訴你它是一個文件而不是目錄? – kaylum

0

經過測試,輸出爲tar tf, 目錄結尾爲/的條目的tar, 的tar和GNU版本。 因此,爲了測試是否Dir/Sub/Text是在存檔, 你可以簡單地用全系列匹配用grep一個文件或目錄:

if tar tf Archive.Tar | grep -x Dir/Sub/Text >/dev/null 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

如果壓縮文件包含Dir/SubDir/Text/,則Dir/SubDir/Text是一個目錄,而grep將不匹配,所以KO將被打印。

如果壓縮文件包含Dir/SubDir/Text無拖尾/, 然後Dir/SubDir/Text是一個文件和grep匹配, 所以確定將被打印出來。

0
if [ ! -d Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

將返回KO只有在目錄文本存在,並且是確定的,如果它是一個文件或不存在(或者更準確地說也行,如果它是一個符號鏈接)。

相關問題