2012-12-04 120 views
3

我有一個Bash腳本,它循環遍歷文件並掩蓋它們。這些文件被gzip壓縮,我需要在將它們作爲參數傳遞給Python程序之前先進行gunzip,如下面的腳本所示。問題是變量$i不會變成文件名的解壓縮版本。解壓縮之前的文件名是my-log-1.c.log.gz。在下面的文件上運行gunzip後,我想通過my-log-1.c.log作爲masker.sh腳本的參數,而不是.gz版本。我將如何做到這一點?在shell腳本中從文件名中刪除一級文件擴展名

#!bin/bash 

cd /home/logs 

    for i in * 
    gunzip $i 
    do 
     python masker.py $i # python program masks files 
    rm $i 
    echo "masked_file and removed = $i" 
    done 

回答

3

使用basename

for i in; do 
    gunzip "$i" 
    i=$(basename "$i" .gz) 
    python masker.py "$i" # python program masks files 
    rm $i 
    echo "masked_file and removed = $i" 
done 

第一個參數是文件名,第二個是要刪除的擴展。

+0

這是什麼呢? – user836087

+0

它將my-log-1.c.log.gz轉換爲my-log-1.c.log,並將其存儲在'i' – perreal

+0

以及不具有.gz擴展名的文件開頭的目錄中,我的腳本把這些搞砸了? – user836087

0

您可以使用下面的程序:

for i in; do 
    gunzip "$i" 
    i=$(echo $i|rev|cut -d'.' -f2-|rev) 
    python masker.py "$i" # python program masks files 
    rm $i 
    echo "masked_file and removed = $i" 
done 
+0

剝離期限的實施是相當難看的。它會很慢,而且感覺像是一團糟。 –

相關問題