2012-10-17 68 views
0

我使用bash遍歷文件的文件夾,但我需要剪切前面的路徑。例如,如果我有'/ temp/test/filename',我想中斷'/ temp/test /'並將文件名存儲到一個變量中,這樣我就可以在其中寫入一個文件名的日誌。在bash中「剪切」內容後分配一個變量

誰能幫助我嗎?問題是變量temp總是空的。

這裏是我的bash代碼:

#!/bin/bash 

for file in /temp/test/* 
do 
    if [[ ! -f "$file" ]] 
    then 
     continue 
    fi 

    temp="$file"|cut -d'/' -f3 

    $file > /var/log/$temp$(date +%Y%m%d%H%M%S).log 
done 

exit 
+0

與問題無關:您可以使用'if [[-f「$ file」]]'並且只在TRUE時運行命令,所以您不必使用'continue' – doubleDown

回答

1

試一下:

$ x=/temp/test/filename 
$ echo ${x##*/} 
filename 

另一種解決方案是使用basename

$ basename /temp/test/filename 
filename 

第一個解決方案是parameter expansion,這是一個bash builtin,所以我們提高性能。

您的線路temp="$file"|cut -d'/' -f3已損壞。

  • 當你想存儲在一個變量的命令的輸出,你應該做的var=$(command)
  • 你需要用here-string<<<)或傳遞值到命令的STDINecho value | command

終於,如果你想使用cut

$ temp=$(cut -d/ -f4 <<< /temp/test/filename) 
$ echo $temp 
filename 
+0

我仍然沒有看到我如何隔離文件名你似乎孤立的路徑名,並拋出文件名 –

+0

好吧,誤解,我編輯我的文章 –

+0

很酷的感謝,basename命令完美作品 –