複数(なしを含む)ファイル拡張子の変更

複数(なしを含む)ファイル拡張子の変更

一部のファイルの拡張子が.htmlなどで、一部のファイルがそうでないファイルディレクトリがある場合は、そのファイルをすべて.txtなどに変更するにはどうすればよいですか?

答え1

私はこれがあなたにうまくいくと思います(おそらくsedを使用するよりエレガントなアプローチです)。

for file in *; do
  base=`echo "${file%.*}"`
  mv -- "${file}" "${base}.txt"
done

答え2

よりエレガントにする必要はありませんが、完全性のためのsed解決策は次のとおりです。

for file in *; do
  mv "$file" "$(echo "$file" | sed 's/^\(.*\)\.\?.*$/\1.txt/')"
done

sed ビットはファイル名の最後のドットの前のすべてをつかみ、ドットとそのあとのすべてを「.txt」に置き換えます。ファイル名にドットがない場合は、ファイル名全体に「.txt」が追加されます。

どの方法を使用しても、スペースなどのファイル名を処理するには、変数の周りの引用符が非常に重要です。

答え3

シェルでこれらすべての名前を変更するには:

for file in *; do
  mv -- "${file}" "`basename -- "${file}"`.txt"
done

file拡張を決定するには、タイプをテストするために、または他のチェックを使用する必要があるかもしれません。

関連情報