同じサフィックスが付いたファイル名の最初の部分を抽出する方法は?

同じサフィックスが付いたファイル名の最初の部分を抽出する方法は?

可変長ファイル名の接頭辞を取得したいと思います。

In: some_filename_123-uniq.tar.gz
Out: some_filename_123
In: some_filename_1-uniq.tar.gz
Out: some_filename_1

これは私が望むものとは正反対です-uniq.tar.gz

result=$(echo *-uniq.tar.gz | rev | cut -c-12 | rev)
echo $result

-uniq.tar.gzサフィックスが付いた項目は1つだけです。

最も簡単な方法のように見えるパラメータ置換を試しましたが、構文エラーが発生しました。

${"some_filename_123-uniq.tar.gz"//"-uniq.tar.gz"}
bash: ${"some_filename_123-uniq.tar.gz"/""/"-uniq.tar.gz"}: bad substitution

ベストアンサー1

最も簡単な方法のようなパラメータ置換を試してみました。

それはい最も簡単な方法(名前が示すように、コメントで指摘したように、シェルは拡張パラメータ/変数); (最後まで)サフィックスを削除する
場合${var%-*}(この場合は最後のものから始まります-):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f%-*}"   
done

または${var:offset:length}最後のものを削除してください窒素文字(ここで長さ負の整数です):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f:0:-12}"
done

おすすめ記事