ファイル名から最後から2番目の拡張子を削除します。

ファイル名から最後から2番目の拡張子を削除します。

フォルダに無効な拡張子を持つ多くのファイルが含まれているとします。

Song1.avi.mp3
Song2.avi.mp3
Song32.web.mp3
Song23.mp4.mp3
Song2a.mp9.mp3

web2番目のフィールド(、、、avi)のみを削除したいと思いますmp4。 sedの使い方を知っていますが、拡張機能を追加する必要があります

 mv -v $i "$(echo $i|sed 's:.flv::g;s:.avi::g;s:.mp4::g')"

sed、awk、またはperlを使用して2番目の誤った拡張のみを削除する簡単な方法を知っている人はいますか?

ベストアンサー1

外部ユーティリティは必要ありません。シェル自体の文字列操作機能。これにより、特殊文字によるファイル名の破損を防ぐのが簡単になります。そして覚えて変数の置換には常に二重引用符を使用してください。

mv -v -- "$i" "${i%.*.*}.${i##*.}"

(明らかに、このコードスニペットは、ファイル名に両方の拡張子が含まれていると仮定しています。そうでない場合は${i%.*.*}完全なファイル名です。)

おすすめ記事