Extract filename and extension in Bash

后端 未结 30 2015
野趣味
野趣味 2020-11-21 05:29

I want to get the filename (without extension) and the extension separately.

The best solution I found so far is:

NAME=`echo \"$FILE\" | cut -d\'.\'          


        
30条回答
  •  花落未央
    2020-11-21 06:28

    Here is the algorithm I used for finding the name and extension of a file when I wrote a Bash script to make names unique when names conflicted with respect to casing.

    #! /bin/bash 
    
    #
    # Finds 
    # -- name and extension pairs
    # -- null extension when there isn't an extension.
    # -- Finds name of a hidden file without an extension
    # 
    
    declare -a fileNames=(
      '.Montreal' 
      '.Rome.txt' 
      'Loundon.txt' 
      'Paris' 
      'San Diego.txt'
      'San Francisco' 
      )
    
    echo "Script ${0} finding name and extension pairs."
    echo 
    
    for theFileName in "${fileNames[@]}"
    do
         echo "theFileName=${theFileName}"  
    
         # Get the proposed name by chopping off the extension
         name="${theFileName%.*}"
    
         # get extension.  Set to null when there isn't an extension
         # Thanks to mklement0 in a comment above.
         extension=$([[ "$theFileName" == *.* ]] && echo ".${theFileName##*.}" || echo '')
    
         # a hidden file without extenson?
         if [ "${theFileName}" = "${extension}" ] ; then
             # hidden file without extension.  Fixup.
             name=${theFileName}
             extension=""
         fi
    
         echo "  name=${name}"
         echo "  extension=${extension}"
    done 
    

    The test run.

    $ config/Name\&Extension.bash 
    Script config/Name&Extension.bash finding name and extension pairs.
    
    theFileName=.Montreal
      name=.Montreal
      extension=
    theFileName=.Rome.txt
      name=.Rome
      extension=.txt
    theFileName=Loundon.txt
      name=Loundon
      extension=.txt
    theFileName=Paris
      name=Paris
      extension=
    theFileName=San Diego.txt
      name=San Diego
      extension=.txt
    theFileName=San Francisco
      name=San Francisco
      extension=
    $ 
    

    FYI: The complete transliteration program and more test cases can be found here: https://www.dropbox.com/s/4c6m0f2e28a1vxf/avoid-clashes-code.zip?dl=0

提交回复
热议问题