複数のドットを持つファイル拡張子を見つける方法

複数のドットを持つファイル拡張子を見つける方法

複数のドットファイル名から拡張子を抽出したいと思います。たとえば、

gbamidi-v1.0.tar.gz

「gz」または「0.tar.gz」ではなく「tar.gz」をインポートする必要があります。

sed私はbash独自の機能(または同じposixコマンドを使用)に依存しないソリューションを好みますcut

編集:合理的な解決策は次のとおりです。 「最後のポイントから2番目のポイント以降のすべてのアイテムを取得しますが、長さが<= 1の数字または部分文字列は除外します。」

答え1

拡張子がピリオドの後の文字で始まると仮定すると、次のコマンドが印刷されます.tar.gz

echo gbamidi-v1.0.tar.gz | awk \
    'BEGIN { FS = "\." } \
    { \
        extension = ""; \
        i = NF; \
        while ((i > 1) && (substr($i, 1, 1) ~ /[A-Za-z]/)) { \
            extension = "." $i extension; \
            i-- \
        }; \
        print extension \
    }'

答え2

すべての場合で動作するわけではありませんが、.gz拡張可能です。foo.tar.gzまずaで抽出し、保管をfoo.tarキャンセルする必要があります。 1つの命令でこれを実行できることが便利です。

延長を受けるべきですか?それは.gz

他のものが必要な場合は、regexなどを使用して特定のアイテムをターゲティングする必要がありawkますcut

関連情報