2012-10-17 69 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命令完美作品 –