Extract directory path and filename

后端 未结 7 884
遇见更好的自我
遇见更好的自我 2021-01-31 03:06

I have a variable which has the directory path, along with the file name. I want to extract the filename alone from the Unix directory path and store it in a variable.



        
相关标签:
7条回答
  • 2021-01-31 03:21

    bash:

    fspec="/exp/home1/abc.txt"
    fname="${fspec##*/}"
    
    0 讨论(0)
  • 2021-01-31 03:21

    dirname "/usr/home/theconjuring/music/song.mp3" will yield /usr/home/theconjuring/music.

    0 讨论(0)
  • 2021-01-31 03:24

    bash to get file name

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

    other ways

    awk

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

    sed

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

    using IFS

    $ IFS="/"
    $ set -- $fspec
    $ eval echo \${${#@}}
    abc.txt
    
    0 讨论(0)
  • 2021-01-31 03:26

    Using bash "here string":

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

    The benefit of the "here string" is that it avoids the need/overhead of running an echo command. In other words, the "here string" is internal to the shell. That is:

    $ tr <<< $fspec
    

    as opposed to:

    $ echo $fspec | tr
    
    0 讨论(0)
  • 2021-01-31 03:33
    echo $fspec | tr "/" "\n"|tail -1
    
    0 讨论(0)
  • 2021-01-31 03:40

    Use the basename command to extract the filename from the path:

    [/tmp]$ export fspec=/exp/home1/abc.txt 
    [/tmp]$ fname=`basename $fspec`
    [/tmp]$ echo $fname
    abc.txt
    
    0 讨论(0)
提交回复
热议问题