GNU/Linux >> Linux の 問題 >  >> Linux

bashでパスと拡張子なしでファイルのベース名を抽出します

basename コマンドには 2 つの異なる呼び出しがあります。一方では、パスだけを指定します。この場合、最後のコンポーネントが提供されますが、他方では、削除するサフィックスも指定します。したがって、basename の 2 番目の呼び出しを使用して、サンプル コードを単純化できます。また、正しく引用するように注意してください:

fbname=$(basename "$1" .txt)
echo "$fbname"

ここにワンライナーがあります:

<オール>
  • $(basename "${s%.*}")
  • $(basename "${s}" ".${s##*.}")
  • これが必要だったのは、bongbang と w4etwetewtwet が尋ねたのと同じです。


    外部の basename を呼び出す必要はありません 指図。代わりに、次のコマンドを使用できます:

    $ s=/the/path/foo.txt
    $ echo "${s##*/}"
    foo.txt
    $ s=${s##*/}
    $ echo "${s%.txt}"
    foo
    $ echo "${s%.*}"
    foo
    

    このソリューションは、最近 (2004 年以降) のすべてで機能するはずです。 ) POSIX 準拠シェル (例:bashdashksh など)

    出典:シェル コマンド言語 2.6.2 パラメータ展開

    bash 文字列操作の詳細:http://tldp.org/LDP/LG/issue18/bash.html


    .tar.gz のように末尾が 2 つの場合でも、basename と cut の組み合わせは問題なく機能します。 :

    fbname=$(basename "$fullfile" | cut -d. -f1)
    

    このソリューションが必要とする演算能力が Bash Parameter Expansion よりも少ない場合、興味深いでしょう。


    Linux
    1. Linuxで.gzファイルと.tar.gzファイルを抽出する方法

    2. 名前を変更せずにファイルマネージャでファイルとフォルダを非表示にする方法

    3. パス変数がBashで設定されている場所の完全なビュー?

    1. Tar:サブフォルダーを作成せずに単一のファイルをディレクトリに抽出しますか?

    2. Bashでファイルパスをどのように正規化しますか?

    3. Bashでファイルパス引数の最後のディレクトリ名/ファイル名を取得する

    1. Unix - フォルダーとファイルのパスを作成する

    2. パス/ファイル:行を表示せずにgrep

    3. シェルで .sh 拡張子のないファイルを実行する方法