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

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

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

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

答え2

迅速で汚い方法は次のとおりです。 sedを使用して、文字列を何もないものに置き換えます(削除)。

for i in *-uniq.tar.gz
do
result=$(echo $i | sed 's/-uniq.tar.gz$//')
echo "$result"
done

上記のコードは、ディレクトリを繰り返しながら -uniq.tar.gz で終わるすべてのエントリを検索し、末尾の部分を削除して結果を表示します。

関連情報