【问题标题】:Extract directory path and filename提取目录路径和文件名
【发布时间】:2011-02-01 22:10:42
【问题描述】:

我有一个变量,它具有目录路径以及文件名。我想从 Unix 目录路径中单独提取文件名并将其存储在变量中。

fspec="/exp/home1/abc.txt"  

【问题讨论】:

标签: shell unix


【解决方案1】:

使用basename命令从路径中提取文件名:

[/tmp]$ export fspec=/exp/home1/abc.txt 
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt

【讨论】:

    【解决方案2】:

    bash 获取文件名

    fspec="/exp/home1/abc.txt" 
    filename="${fspec##*/}"  # get filename
    dirname="${fspec%/*}" # get directory/path name
    

    其他方式

    awk

    $ echo $fspec | awk -F"/" '{print $NF}'
    abc.txt
    

    sed

    $ echo $fspec | sed 's/.*\///'
    abc.txt
    

    使用 IFS

    $ IFS="/"
    $ set -- $fspec
    $ eval echo \${${#@}}
    abc.txt
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      base=$(basename "$fspec")
      

      【讨论】:

      • 而且,如果您也需要路径,请使用 dirname:fpath=$(dirname $fspec)
      【解决方案4】:

      dirname "/usr/home/theconjuring/music/song.mp3" 将产生 /usr/home/theconjuring/music.

      【讨论】:

        【解决方案5】:

        重击:

        fspec="/exp/home1/abc.txt"
        fname="${fspec##*/}"
        

        【讨论】:

          【解决方案6】:
          echo $fspec | tr "/" "\n"|tail -1
          

          【讨论】:

            【解决方案7】:

            使用 bash “这里的字符串”:

            $ fspec="/exp/home1/abc.txt" 
            $ tr  "/"  "\n"  <<< $fspec | tail -1
            abc.txt
            $ filename=$(tr  "/"  "\n"  <<< $fspec | tail -1)
            $ echo $filename
            abc.txt
            

            “这里字符串”的好处是它避免了运行echo 命令的需要/开销。换句话说,“here 字符串”在 shell 内部。那就是:

            $ tr <<< $fspec
            

            相对于:

            $ echo $fspec | tr
            

            【讨论】:

              猜你喜欢
              • 2012-10-04
              • 2014-10-20
              • 1970-01-01
              • 2011-09-01
              • 2014-04-21
              • 1970-01-01
              • 2017-06-17
              • 2015-04-26
              相关资源
              最近更新 更多